此系列是为自己做的一个总结,不是很系统,主要目的是记录linux下我认为经常忘的方方面面。
target: prerequisites
command
...
...
target也就是一个目标文件,可以是Object File,也可以是执行文件。
prerequisites就是,要生成那个target所需要的文件或是目标,也就是依赖项。
command也就是make需要执行的命令。(任意的Shell命令)
在Makefile中的命令,必须要以[Tab]键开始。
这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容。
举个栗子:最简单的hello world程序:只有一个文件main.c,那么我们如何写makefile来生成可执行文件呢?
(1)、首先我们需要把main.c编译为中间文件。
(2)、有了中间文件,我们就可以通过连接来得到最终的可执行文件了。
那么思路理清楚了,看下makefile的写法:
test : main.o
gcc -o test main.o
main.o : main.c
gcc -c main.c
clean :
rm main.o test
解释一下:第一行 test : main.o 声明了最后要得到的可执行文件名为test,他依赖于main.o,连接的命令为:gcc -o test main.o
明白了第一、二行以下的就不用多说了。
这样一来如果我们的中间文件发生变化,就很容易了只需要改动obj = main.o就可以了。
test : main.o
test : main.o
main.o : main.c
clean :
rm main.o test
还能简化么? 能!
make会自动推导依赖关系,如果没有显示的写出main.o的依赖关系,make会自动推导出main.o依赖于main.c。那么上面的makefile就变成了这样:
test : main.o
clean :
rm main.o test
现在简单了吧。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/dancing_night/article/details/47780553