【发布时间】:2013-06-03 15:05:50
【问题描述】:
我有一个 C 程序,我想为主机和来宾架构编译。
主机是 i86 访客是 ARM
我尝试编写如下代码
CC=arm-none-linux-gnueabi-gcc
all : arm
arm :
CC=arm-none-linux-gnueabi-gcc
host :
CC=gcc
clean :
rm -rf *.o
rm bench
$(CC) src/main.c src/cpu/cpu.c src/include/common.c -Isrc -lrt -static -o bench
但是当我运行 make arm 或 make host 时,我得到一个缺少分隔符的错误。 我怎样才能实现这个功能?
编辑: 我遵循了公认的答案,但仍然想要一个目标来完成我的任务.. 为此,我重写了我的 Makefile 如下,
all : bench
host_helper :
CC=gcc
arm_helper :
CC=arm-none-linux-gnueabi-gcc
arm : arm_helper bench
host : host_helper bench
all : bench
clean :
@rm -rf *.o
@rm -f bench
bench : clean
$(CC) src/main.c src/cpu/cpu.c src/include/common.c -Isrc -lrt -static -o bench
这是我在运行make arm时得到的输出
CC=arm-none-linux-gnueabi-gcc
cc src/main.c src/cpu/cpu.c src/include/common.c -Isrc -lrt -static -o bench
为什么 CC 变量没有改变?
这是因为 Makefile 对每个目标都进行了 fork,因此一旦 arm_helper 目标完成,CC 变量就会丢失?
这种方法是否可以达到预期的目的?
【问题讨论】:
-
makefile 中的最后一行是做什么的?这不是规则的一部分...
-
是的,我确定..它抱怨最后一行..该行中没有选项卡..因为我的目标是不管选项如何都执行它..虽然,我会最终希望在执行
make clean时避免运行$(CC)@ -
我希望将其编写为类似于 bash 脚本。如何在一组命令后获得一个标签来执行另一个标签?我希望标签
arm和host的功能如下:1)设置 CC 变量 2)运行公共代码$(CC) src/main.c src/cpu/cpu.c src/include/common.c -Isrc -lrt -static -o bench
标签: gcc makefile cross-compiling