[英]Reusable make file for any single source c file
我正在尝试使用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。
我可以在这方面寻求帮助吗?
如果您希望一个名为foo
的目标从foo.c
构建的foo.o
中创建foo.elf
,则需要一个额外的规则; 在您的示例中,您创建了一个规则% : %.o
,它从foo.o
生成foo
,但这不是您想要的。 您要foo.elf
。
同样,您不能在配方内使用模式。 您必须使用自动变量 。
所以:
CC = gcc
% : %.elf ;
%.elf : %.o
$(CC) -o $@ $^
%.o : %.c
$(CC) -o $@ -c $<
正如Kerrek在上面的注释中指出的那样,实际上您不需要那里的最后一个模式规则,因为make已经知道如何使用内置规则从.c
文件构建.o
文件。
现在,如果您运行make foo
,它将foo.elf
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.