对于我的一个类中的一个任务,我们需要为我们的C程序创建一个比compile: gcc whatever
更复杂的Makefile.我相信我们应该做这样的事情:
outputname: file1.o file2.o file3.o file4.o
gcc -o outputname file1.o file2.o file3.o file4.o
clean:
rm -f outputname file1.o file2.o file3.o file4.o
file1.o: file1.c
gcc -c file1.c
file2.o: file2.c
gcc -c file2.c
file3.o: file3.c
gcc -c file3.c
file4.o: file4.c
gcc -c file4.c
但不得不多次列出相同的文件名让我感到恼火.如果我需要更新一个名称,我需要确保在文件中替换它的每个实例.或者,如果我添加一个文件,我必须添加与文件中已有的四个其他行几乎相同的新行.我已经设法接近了上述Makefile的功能:
files := file1.o file2.o file3.o file4.o
output := outputname
$(output): $(files)
gcc -o $(output) $(files)
clean:
rm -f $(output) $(files)
$(files): $(files:.o=.c)
gcc -c $(@:.o=.c)
我能说出的唯一区别是,与第一个示例不同的是,如果所有c文件中的任何一个已经更新,这将重新编译所有c文件,从而消除了Make文件的优势之一.我还能做些什么来go 掉冗余但保留所有功能吗?