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

时间:2015-01-27 09:36:42

标签: c gcc makefile

我尝试使用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。

我可以得到一些帮助吗?

1 个答案:

答案 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