演示示例:

app:main.o hello.o
gcc -o app main.o hello.o
main.o:main.c hello.h
gcc -c main.c
hello.o:hello.c hello.h
gcc -c hello.c
clean:
rm app main.o hello.o

先让我们看看 app 的规则:

app:main.o hello.o
gcc -o app main.o hello.o

可以看到 .o 文件的字符串被重复了两次。如果工程需要加入一个新的 .o 文件,那么
需要在三个地方添加的.o文件加(还有一个地方在 clean 中)。

我们的演示示例比较简单,修改起来也不会很麻烦。但是在真实的项目中,涉及到的地方可能比较多,且makefile 变得更复杂,那么我们就有可能会忘掉一个需要加入的地方,而导致编译失败。所以,为了 makefile 的易维护,在 makefile 中我们可以使用变量。这样我们只要修改变量,其他引用到变量的地方就会同时被修改。

我们声明一个自定义一个变量OBJECTS,表示目标文件。我们在 makefile 一开始就这样定义:

OBJECTS = main.o hello.o

在makefile 中以 $(OBJECTS) 的方式来使用这个变量,我们修改一下我们的演示示例:

OBJECTS = main.o hello.o
app:$(OBJECTS)
gcc -o app $(OBJECTS)
main.o:main.c hello.h
gcc -c\
main.c
hello.o:hello.c hello.h
gcc -c hello.c
clean:
rm app $(OBJECTS)

如果有新的 .o 文件加入,我们只需简单地修改一下 OBJECTS 变量就可以了!

谢谢阅读!