具有多个源的 C 生成文件

Use*_*501 5 c makefile

我目前正在学习 C,现在我已经完成了需要编写 Makefile 的教程,但我很难为多个源编写 Makefile。有人可以告诉我如何更正多个源的 Makefile 代码吗?所有文件都在同一目录中,总共有 3 个 C 源文件,如 filename1/2/3 等所示。我试图在单个 makefile 中使用 3 个源文件构建 3 个单独的程序

 OPT = -O4              

all: filename1

filename1: filename1.o 
    gcc $(OPT) -o filename1 filename1.o

filename1.o: filename1.c
    gcc $(OPT) -c filename1.c

filename2: filename2.o 
    gcc $(OPT) -o filename2 filename2.o

filename2.o: filename2.c
    gcc $(OPT) -c filename2.c   

filename3: filename3.o 
    gcc $(OPT) -o filename3 filename3.o

filename3.o: filename3.c
    gcc $(OPT) -c filename3.c       
clean:
    rm -f *.o
    rm -f filename1
    rm -f filename2
    rm -f filename3
Run Code Online (Sandbox Code Playgroud)

或者我的代码适合我想要它做的事情吗?

Tom*_*m W 4

好的,考虑到您正在制作三个不同的程序,makefile似乎没有任何问题。它应该有效。

一些使其更可用的建议:

1)声明“all”和“clean”目标是假的。这将阻止 Make 尝试创建名为“all”和“clean”的文件。

.PHONY: all clean
Run Code Online (Sandbox Code Playgroud)

2)您可能希望“全部”目标构建所有三个程序,而不仅仅是一个程序,因此将其更改为:

all: filename1 filename2 filename3
Run Code Online (Sandbox Code Playgroud)

3)如果您最终使用它来制作三个以上的程序,并且它们都共享相似的构建过程,您可以使用模式匹配将您的规则折叠成较小的集合。请参阅马丁·贝克特的回答作为示例。但是,那没有必要。