
解析:Makefile中变量的引用格式就是$(变量名),这是没什么好讲的,记住就行。在Makefile中有一些特殊的宏定义需要记住,$@:表示生成的目标 ;$<:表示生成依赖的文件;$?是执行上一条指令的返回值;可以参考博客:《Makefile的基本用法》;

(1)ifeq用来判断两个值是否相等,ifneq用来判断两个值是否不相等;
(2)ifeq和ifneq是Makefile中的两个关键字,在Makefile中不用"=“和”!=";
(3)ifeq就是英文单词"if equal"的缩写,翻译过来就是如果相等;ifneq就是英文单词"if not equal"的缩写,翻译过来就是如果不相等;
(4)更多细节参考博客:《Makefile中的条件编译:ifeq、ifneq、ifdef和ifndef》;

ifneq的解析参考第二题,这里强调一点就是ifeq和ifneq可以互相嵌套使用,组成多层次的判断逻辑;

(1)在实际工作中我们编写Makefile时,一般会添加help目标,方便其他人使用Makefile时可以通过"make help"命令来查看此Makefile的使用方法;
(2)"make -h"和"make --help"是查看make指令的帮助信息,而不是Makefile的help信息;
(3)在Makefile中就不使用define关键字,错的很离谱;
(4)定义的help目标是可以使用函数的,和其他的目标没有任何区别;

(1)subst函数是Makefile自带的函数,功能是替换字符串,Makefile自带了一些函数,这些函数不用去记,能分辨出是函数并知道怎么查询即可;
(2)函数原型:$(subst, , )
(3)功能:把字串中的 字符串替换成
(4)返回:函数返回被替换过后的字符串。
补充:参考博客:《Makefile的函数调用详解》;

| 选项 | 功能 |
|---|---|
| -k | 发生错误后继续执行 |
| -n | 只是显示Makefile的执行过程,但不会真正去执行命令,用于调试Makefile |
| -f | 指定make命令读取的文件。要记住make是一个命令,我们平时执行make命令时并没有指定文件是因为make命令会默认去当前目录下读取名字叫Makefile的文件。当我们用-f时,可以指定本次读取的文件,这时文件的名字没有必要一定是Makefile,可以叫任意名字。比如:make -f aaa,其中aaa就是我们通常意义的Makefile文件 |
| -c | 跳转到指定目录执行make命令,一般用来在主Makefile中调用子Makefile |

(1)上面的都是Makefile自带的函数,个人觉得能分辨出这是函数,会网上查询就行,没必要去记,反正记了也会忘,重点在于理解Makefile中函数的形式。
(2)参考博客:《Makefile的函数调用详解》;

(1) $@表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$@“就是匹配于目标中模式定义的集合。
(2)$%仅当目标是函数库文件中,表示规则中的目标成员名。
(3)$^所有的依赖目标的集合。
(4)$*这个变量表示目标模式中”%"及其之前的部分。

第10行和第13行是命令,需要tab键开头,这是固定格式

(1)&&表示前一条命令执行成功时,才执行后一条命令,可以参考博客:《Linux中的&、&&、|、||、 ? 、 ?、 ?、#》;
(2)选项A:先进入到指定目录,再执行make命令,也就是调用指定目录下的Makefile;
(3)选项B:include是Makefile的关键字,可以在Makefile文件中用include关键字来引用其他路径下的Makefile文件,类似C语言引用头文件;
(4)选项C:-C是make命令的选项,先跳转到指定目录在执行make命令;
(5)选项D:-f是make命令的选项,指定Makefile文件;