我尝试使用make执行以下操作:
$ make app1 // takes app1.c, compiles it to app1.elf
$ make app2 // takes app2.c, compiles it to app2.elf
我想要完成的下一步是指定源文件和头文件的前缀。
$ make app1
应该采用前缀为app1- *(app1-src1.c,app1-src2.c等,app1-src1.h,app1-src2.h等)的所有源文件和头文件并将其编译成app1.elf
到目前为止我所做的并不适合我。它只能使用输入源文件的前缀生成指定的前缀,但最后只能生成.elf
all: %
%.o: %.c
gcc -c %.c
%: %.o
gcc %.o -o %.elf
使用' make abc'成功获取abc.c并将其编译为abc而不是我想要的abc.elf。
我可以得到一些帮助吗?
答案 0 :(得分:2)
如果您希望名为foo
的目标从foo.elf
foo.o
创建foo.c
,那么您需要一个额外的规则;在您的示例中,您创建了一个从% : %.o
构建foo
的规则foo.o
,但这不是您想要的。您希望构建foo.elf
。
此外,您不能在配方中使用模式。您必须使用automatic variables。
所以:
CC = gcc
% : %.elf ;
%.elf : %.o
$(CC) -o $@ $^
%.o : %.c
$(CC) -o $@ -c $<
正如Kerrek在上面的评论中指出的那样,你实际上并不需要最后的模式规则,因为make已经知道如何使用内置规则从.o
文件构建.c
文件。
现在,如果您运行make foo
,它将构建foo.elf
。