我们写程序完成后,都需要进行编译才能运行,在一些集成的IDE(如vs2010、QT等),都提供有一键编译的功能,整个编译过程(预处理、编译、链接),IDE已经帮我们屏蔽了。但是在嵌入式或Linux平台下的开发,基本都是通过make跟makefile来管理整个工程项目,即源码与源码之间如何关联、依赖等等。除此之外,学习make跟makefile,可以使得开发人员对于程序的编译过程有更深层次的认识。下边简单来说说什么是make与makefile。
make其实是一个程序,我们通过执行这个程序来编译我们的源码文件,而makefile泛指一类文件,这类文件中包含了我们所编写的源码文件之间的规则、关系等等,执行make程序的时候,将makefile这类文件作为make程序的参数,便可依据编写在makefile文件中的规则,来编译我们的源码。
比如我们有一个makefile的文件叫make.txt(名字随便起),里边包含如下两行信息
target1:
echo "this is target1"
target2:
echo "this is target2"
为了解释make.txt中的两行信息,我们先来了解下makefile文件的构成及基本的规则
makefile文件总体上由目标与命令构成(需要注意的是命令前边必须为tab键,即\t),再加上一些变量等等
目标:
命令
按照上边的目标与命令可以知道,target就是目标,echo "this is first makefile demo" 就是命令。现在makefile文件与基本的规则都准备完毕,下边通过如下命令执行make
make -f make.txt target2 (-f为制定makefile文件为make.txt,target2为文件中的目标,即要执行制定目标下的命令),执行结果如下
其实make还可以简化,假如我们将make.txt改名为makefile或Makefile,那么久需要用-f指定文件名,make程序会主动在当前目录下寻找makefile或Makefile作为makefile文件,除此外,我们也可以不指定目标,此时make就会去执行makefile文件中最顶部的目标所对应的命令。为此,我们将make.txt改为makefile,并执行如下命名:
make
可以看到,make会在当前目录下=主动寻找makefile,并执行最顶部目标的命令,当然我们也可以这样执行:make target2,那么此时执行的就是target2这个目标下命令。
总结:
1、make是一个可执行程序,主要用于编译源码、管理工程
2、makefile本质是一个源码文件,其中包含各种规则,主要是各个源码文件之间的关联关系
3、make依据makefile内部的规则,对我们编写的源代码进行编译连接等操作。
以上内容参考《狄泰软件学院》操作系统篇之 - makefile专题