前言
Makefile文件的编写规则及内容
第一个最简单的 Makefile 文件举例
test: main.c sub.c sub.h
gcc -o test main.c sub.c sub.h
如上述代码所示,生成的可执行文件(目标)test依赖于三个文件,分别是main.c、sub.c、sub.h ,这是第一行代码的含义。第二行代码(开头要敲Tab键)的含义就是,执行这句编译代码。
Makefile文件通过判断三个依赖是否有改动,用来判断第二行编译代码是否要重新运行一次。判断依赖是否有改动主要是对文件的时间和当前目标test的生成时间做对比。
缺点:这种Makefile文件的编写缺点就是“牵一发而动全身”,比如我们修改了其中的任一项.c依赖文件,那么都会导致 gcc 这句代码的执行,导致其他没有被修改的依赖文件再次重新被编译,这就导致了执行效率很低。
注意:-o 表示链接的意思。
第二个Makefile示例
针对于上面提到的缺点,我们可以将目标test的生成进行细分。一个可执行文件的生成,首先是将.c文件编译成可链接的.o文件,然后最后将.o文件进行链接,生成可执行程序。所以Makefile文件也可以这么写(分开编译,统一链接):
代码如下(示例):
test : main.o sub.o
gcc -o test main.o sub.o
main.o