我正在尝试为{c} file_a.c
file_b.c
file_c.c
的3个c文件创建一个make文件 - 我希望能够make file_a_1
创建一个可执行文件我可以通过输入file_a_1
来运行。其他2个文件也是如此。
也可以通过键入make clean
删除所有.o
个文件。我试过这个:
All: file_a_1 file_b_1 file_c_1
file_a_1: file_a.c
file_a.c -o file_a_1
file_b_1: file_b.c
file_b.c -o file_b_1
file_c_1: file_c.c
file_c.c -o file_c_1
clean:
rm -rf file_a_1.o
rm -rf file_b_1.o
rm -rf file_c_1.o
但它不起作用
有人可以帮我创建这个makefile吗?
答案 0 :(得分:3)
除了使用标签之外,正如上一张海报所指出的,如果你正在做多个类似的事情,你可能想要使用隐式的make规则:
.PHONY: all clean
TARGETS = file_a_1 file_b_1 file_c_1
all: $(TARGETS)
.c:
gcc -o $@ $<
clean:
rm -rf $(TARGETS) *.o
隐式规则(.c :)表示从.c文件构建可执行文件。 $ @替换匹配的可执行文件的名称; $&lt;表示.c文件,因此如果您执行“make file_a_1”,则上面的隐含规则适用于:
file_a_1.c:
gcc -o file_a_1 file_a_1.c
通常“make clean”也会删除目标可执行文件。你从gcc命令直接链接的方式,你可能不会有任何* .o文件。
答案 1 :(得分:0)
您的makefile需要标签。我想你也错过了编译器的调用。如果您在一步中进行编译和链接,则不会有目标文件。
.PHONY: all
all: file_a_1 file_b_1 file_c_1
file_a_1:
gcc file_a.c -o file_a_1
file_b_1:
gcc file_b.c -o file_b_1
file_c_1:
gcc file_c.c -o file_c_1
clean:
rm -rf file_a_1
rm -rf file_b_1
rm -rf file_c_1