对于我的一个类中的作业,我们需要为C程序创建一个makefile,它比
compile: gcc whatever
。我相信我们应该这样做:
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文件,从而消除makefile的优势之一。我还能做些什么来消除冗余,但保留所有功能吗?