Make-learning 快来打我* 2022-11-17 05:25 129阅读 0赞 ## Make学习笔记 ## > make是工具,Makefile是指导make工作的文件,而CMake则是生成Makefile的工具 要点: 1. 终极目标是Makefile里面的第一个规则目标 2. 目标下面的命令必须接的是Tab制表符,不能是空格隔开 3. 在规则的命令前加一个@符号,则该命令不会打印在控制台 #### Makefile规则 #### 目标:依赖 规则 目标:依赖 规则 ... ###### 变量 ###### 只有字符串类型,不需要声明 使用$符号对变量进行取值 ![在这里插入图片描述][20210408175718696.png] ###### 运算符号 ###### * **=** 延后赋值,可以理解为引用 ![在这里插入图片描述][20210408180125282.png] ![在这里插入图片描述][202104081801395.png] * **:=** 一般的赋值,只会赋值当前值,可认为是一般的等号 ![在这里插入图片描述][20210408180228258.png] ![在这里插入图片描述][20210408180310793.png] * **+=** 拼接字符串 ![在这里插入图片描述][20210408180428668.png]![在这里插入图片描述][20210408180442822.png] ###### 模式匹配(通配符) ###### * **%** 表示任意长度的非空字符串。只能放在规则中。规则中出现%,则称为模式匹配 %.o:%.c gcc -c $< #见下文,符合模式的一系列的依赖文件集合 #表示所有的c文件目标是生成.o文件 ##### 自动化变量 ##### <table> <thead> <tr> <th>自动化变量</th> <th>作用</th> </tr> </thead> <tbody> <tr> <td>$@</td> <td>规则中的目标集合,在模式规则中,如果有多个目标的话,“S@”表示匹配模式中定义的目标集合。</td> </tr> <tr> <td>$%</td> <td>当目标是函数库的时候表示规则中的目标成员名,如果目标不是函数库文件,那么其值为空。</td> </tr> <tr> <td>$<</td> <td>依赖文件集合中的第一个文件,如果依赖文件是以模式(即“%”)定义的,那么“$<”就是符合模式的一系列的文件集合。</td> </tr> <tr> <td>$?</td> <td>所有比目标新的依赖目标集合,以空格分开。</td> </tr> <tr> <td>$^</td> <td>所有依赖文件的集合,使用空格分开,如果在依赖文件中有多个重复的文件,“$^”会去除重复的依赖文件,值保留一份。</td> </tr> <tr> <td>$+</td> <td>和“$^”类似,但是当依赖文件存在重复的话不会去除重复的依赖文件。</td> </tr> <tr> <td>$*</td> <td>。这个变量表示目标模式中"%"及其之前的部分,如果目标是test/a.test.c,目标模式为a.%.c,那么“$*”就是test/a.test。</td> </tr> </tbody> </table> ##### 伪目标 ##### clean: rm *.o 这个clean是为了将其作为一个删除的功能的,但是如果当前目录下有个文件就是叫clean,那么这个目标已经存在了,所以不会执行下面的rm的规则。图中第一个框框make clean是起作用的,但是后面新建了个文件clean之后,就不在起作用了(第二个框框) ![在这里插入图片描述][20210408183801622.png] 而伪目标就是为了解决这个问题,将clean声明为伪目标就不会出现这个问题了 .PHONY:clean clean: rm *.o [20210408175718696.png]: /images/20221022/549de8e15a864cc890d9f9f7ac9f80ee.png [20210408180125282.png]: /images/20221022/04db604a15154ec89660fa3fbfc40103.png [202104081801395.png]: /images/20221022/03d5fe6870ba43378b089dcb7308e89e.png [20210408180228258.png]: /images/20221022/4f89ca4dcbb043c8a74b99b4c4d31a5e.png [20210408180310793.png]: /images/20221022/25173b1ecfad4b6abc18a9ba0fe638f9.png [20210408180428668.png]: https://img-blog.csdnimg.cn/20210408180428668.png [20210408180442822.png]: /images/20221022/2f7cb19b139d49898d0996592b1f5963.png [20210408183801622.png]: /images/20221022/ea574a9db43145f4a9e47f91d67a9cd4.png
还没有评论,来说两句吧...