任何单个源 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
.
我正在尝试使用 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
.