任何单个源 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.o 创建 foo.elf,而 foo.o 是从 foo.c 构建的,那么您需要一个额外的规则;在您的示例中,您创建了一个规则 % : %.o,它从 foo.o 构建 foo,但这不是您想要的。您希望构建 foo.elf

此外,您不能在食谱中使用模式。你必须使用 automatic variables.

所以:

CC = gcc

% : %.elf ;

%.elf : %.o
        $(CC) -o $@ $^

%.o : %.c
        $(CC) -o $@ -c $<

正如 Kerrek 在上面的评论中指出的那样,您实际上并不需要那里的最后一个模式规则,因为 make 已经知道如何使用内置的 .c 文件构建 .o 文件规则。

现在如果你 运行 make foo 它将构建 foo.elf.