如何为3个不同的c文件创建一个makefile

时间:2014-02-01 03:05:53

标签: c linux makefile

我正在尝试为{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吗?

2 个答案:

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