繁体   English   中英

任何单个源c文件的可重用make文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM