有了自己的团队,为了大家能够有所进步,我规划了一些团队建设的内容,其中一项是杂记连载内容,把我平时积累的杂记内容整理出来分享给大家。以下内容是第一篇的完整内容。
看到大家这两天都在学习makefile,今天给大家分享一些make命令及makefile相关的内容。
① Makefile定义一系列的规则来指定,文件编译的依赖关系,哪些文件需要重新编译。
make工具通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模块及库等)
② makefile使用%通配
%.o:CFLAGS=-O搜寻所有匹配格式%.o的目标,将它的变量CFLAGS设置为-O
makefile中在执行命令时会先将命令显示出来,然后执行,makefile中在命令前加@即不打印当前命令,直接执行,使用make -s则将所有的命令显示屏蔽。
make命令时make[1] make[2] 数字应该是指一级、二级子目录
使用#注释行,用反斜框进行转义,如:\#
在Makefile中的命令,必须要以[Tab]键开始
默认的情况下,make命令在当前目录下按顺序找寻文件名为"GNUmakefile"、"makefile"、"Makefile"的文件。使用其他文件名,make命令加参数-f或-file
使用include<filename>包含其他makefile,filename可包含路径和通配符。include前不能使用tab键。
使用反斜杠(\)进行换行。
make时有大量的错误信息,屏幕显示不完全,只能看见最后一部分,使用make >error.txt 这样也没办法显示。使用make2> error.txt 就可以将错误信息重定向到文件了。注意:2和>一定要写在一起!
Makefile中的vpath&VPATH可扩展对编译目标所依赖文件的搜索路径。
③ Makefile中的自动变量:
$? 列出当前目标所依赖的文件列表中比当前文件还要新的文件
$@ 当前目标的名字
$< 当前依赖文件的名字
$* 不包括后缀名的当前依赖文件的名字
$^ 当前规则的整个依赖列表
.PHONY,使make不用檢查目標文件是否存在于磁碟上,也不用查找任何隐含规则,直接假设指定的目的需要被更新(產生目標的命令總會被執行)
.PHONY : clean
clean :
rm *.o
④ 下面简单介绍使用configure生成makefile.大家在阅读模块设计文档时会遇到这种
生成makefile的方式,大家可以对应当前的模块设计文档进行实验。更多configure的所使用的参数信息可使用”.configure –help”.
Makefile是通过configure文件自动生成的,而Makefile.am和Makefile.in都是生成Makefile必须的文件
其中Makefile.am是要自己来写的,根据automake工具的语法
akefile.in是在automake的时候生成的
automake -Generate Makefile.in for configure from Makefile.am.
⑤ 更多的make选项,大家可”man make” 或”make --help”了解,关于Makefile中的
内置函数,大家可查阅资料。
以上内容是我早期的杂记中整理出来的。之后会陆续的将对大家有帮助的内容整出来分享给大家,杂记的内容很琐碎,所以整理出的内容可能不是针对某一具体知识的汇总。希望这些内容会对大家有所帮助,也希望大家有好的想法或经验能够共同分享。