我有一个makefile,它通常创建目录:
$(Release_target_OBJDIR)/%.o: %.cpp
mkdir -p $(dir $@)
$(COMPILE.cpp) $< $(CFLAGS) $(INCLUDES) -o $@
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我在scratchbox2下运行它时,mkdir -p命令总是无声地失败.
我尝试了以下无效的kludge:
$(Release_target_OBJDIR)/%.o: %.cpp
mkdir $(dir $(dir $(dir $@)))
mkdir $(dir $(dir $@))
mkdir $(dir $@)
$(COMPILE.cpp) $< $(CFLAGS) $(INCLUDES) -o $@
Run Code Online (Sandbox Code Playgroud)
这输出:
mkdir -p /home/foo/projects/htc/arm/obj/cbar/release/
mkdir -p /home/foo/projects/htc/arm/obj/cbar/release/
mkdir -p /home/foo/projects/htc/arm/obj/cbar/release/
Run Code Online (Sandbox Code Playgroud)
...尾部斜杠阻止dir函数以我想要的方式剥离最后一个目录.
如果没有编写脚本或小型C应用程序来复制"-p"功能,是否有人有任何想法在makefile中创建子目录?
如果没有-p选项,当makefile尝试创建已存在的目录时,mkdir将给出错误.我可以做mkdir blah 2>/dev/null但是我冒着失去其他错误消息的风险.
有没有人有任何想法为什么mkdir -p在scratchbox2下不起作用?
编辑
根据bobbogo的建议,我把它放在一起.它看起来相当复杂,但似乎工作,即使在scratchbox2下.
# Generic variables for use in functions
comma:= ,
empty:=
space:= $(empty) $(empty)
# Make directory function
forlooprange = $(wordlist 1,$(words $1),1 2 …Run Code Online (Sandbox Code Playgroud) 在刮擦盒内我正在执行git clone,收到以下错误:
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Run Code Online (Sandbox Code Playgroud)
错误:
/pi$ sb2 -t rfs-raspbian -eR git clone git://github.com/danwinship/glib.git
Cloning into 'glib'...
remote: Counting objects: 72484, done.
remote: Compressing objects: 100% (11555/11555), done.
remote: Total 72484 (delta 61357), reused 71916 (delta 60808)
Receiving objects: 100% (72484/72484), 28.86 MiB | 59 KiB/s, done.
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
error: index-pack died of signal 11
fatal: index-pack failed
Run Code Online (Sandbox Code Playgroud)
安装QEmu版本:
qemu-arm -version
qemu-arm version 1.3.90, Copyright …Run Code Online (Sandbox Code Playgroud) 我正在尝试为ARM920T(架构4T)编译Python 3.2,但我遇到了一些奇怪的错误.
我正在Scratchbox环境中编译Python,配置为使用以下编译器:"gcc版本4.3.3(Sourcery G ++ Lite 2009q1-203)"这是一个arm交叉编译器.
在编译时,我确保在以下环境变量中设置-march = armv4t架构标志:CFLAGS,CPPFLAGS,SBOX_EXTRA_COMPILER_FLAGS.
它在scratchbox中编译很好,我能够使用scratchbox arm模拟器运行python解释器.
然而,当我将它移动到我的ARM920T时,我在运行python exe后立即得到了一个非法指令错误.
核心转储产生以下输出:
Program terminated with signal 4, Illegal instruction.
#0 0x00138810 in __aeabi_dadd ()
Run Code Online (Sandbox Code Playgroud)
并且后面跟踪的前几行:
#0 0x00138810 in __aeabi_dadd ()
#1 0x001134f4 in PyLong_FromString (str=0x402de300 "3644798167", pend=0x0, base=10) at Objects/longobject.c:2001
#2 0x00132478 in parsenumber (s=<value optimized out>, c=<value optimized out>) at Python/ast.c:3189
#3 ast_for_atom (n=<value optimized out>, c=<value optimized out>) at Python/ast.c:1396
#4 ast_for_power (n=<value optimized out>, c=<value optimized out>) at Python/ast.c:1726
#5 ast_for_expr (c=0xbeaf7f50, n=0x402f5b78) at …Run Code Online (Sandbox Code Playgroud) 我一直在使用带有基于Make的代码库的sbox而没有任何问题.现在我正在使用基于scons的代码库,并且遇到了一些奇怪的问题.
似乎在scratchbox中,scons找不到g ++.例如,它尝试执行以下操作:
你好hello.c
什么时候该做:
g ++ -o hello hello.c
所以可能它的g ++字符串变量是空的.g ++存在于PATH中 - "g ++"产生/ scratchbox/compilers/bin/g ++.
相同的源在scratchbox之外构建得很好,所以它不应该是scons或代码库的问题.工作时,没有在scratchbox之外设置的特殊环境变量.
如果我象征性地将/ usr/bin/g ++链接到/ scratchbox/compilers/bin/g ++,它会更进一步(产生正确的g ++命令)但是在执行它们时会产生:
sb_gcc_wrapper(g ++):/ scratchbox/compilers/arm-linux-cs2007q3-51sb3/bin/sbox-arm-none-linux-gnueabi-g ++:没有这样的文件或目录
列出的文件是存在.
PATH包含/ scratchbox/compilers/bin,SBOX_REDIRECT_FROM_DIRS包含/ usr/bin,SBOX_REDIRECT_TO_DIRS包含/ scratchbox/compilers/bin,所以我认为它应该能够找到它.
任何建议,将不胜感激!谢谢,雷
编辑:也许相关 - 除非我在scons文件中添加完整路径,否则它也找不到pkg-config
我正在尝试交叉编译我的maemo环境(GNU)应用程序.在正常编译应用程序时,一切正常,但是当它通过sb2编译时会出现以下警告:
$ sb2 gcc -D_GNU_SORCE -o app -Wall -g -I.......//don't think this is relevant
In file included from wifi_collector_menu.c:50:
wifi_collector_list.c: In function `show_net_apns':
wifi_collector_list.c:777: warning: implicit declaration of function `getline'
Run Code Online (Sandbox Code Playgroud)
我完全混淆为什么会发生这种情况,还有其他的getline在程序中有效,我试图在代码内部和编译器命令中同时定义变量_GNU_SOURCE(不是同时)这是行显然导致警告的代码:
size_t bytesnum = MAX_ESSID;
size_t bytes_read;
char *netname = NULL;
printf("Enter name of selected network:");
bytes_read=getline(&netname,&bytesnum,stdin);//This line
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激,提前谢谢.