我们之前说过 makefile 是一种脚本语言程序,那么程序便会有相应的语法。在 makefile 中支持条件判断语句,可以根据条件的值来决定 make 的执行,也可以比较两个不同变量或者变量和常量值。需要注意的是:条件判断语句只能用于控制 make 实际执行的语句;但是,不能控制规则中命令的执行过程。格式如下
创新互联公司主营逊克网站建设的网络公司,主营网站建设方案,重庆APP软件开发,逊克h5小程序制作搭建,逊克网站营销推广欢迎逊克等地区企业咨询条件判断语句的语法如下
那么在 makefile 中都有哪些的条件判断关键呢?
关键字 | 功能 |
ifeq | 判断参数是否相等,相等为 true,否则为 false |
ifneq | 判断参数是否不相等,不相等为 true,否则为 false |
ifdef | 判断变量是否有值,有值为 true,否则为 false |
ifndef | 判断变量是否没有值,没有值为 true,否则为 false |
下来我们还是以代码为例来进行说明
.PHONY : test var1 := A var2 := $(var1) var3 := test : ifeq ($(var1),$(var2)) @echo "var1 == var2" else @echo "var1 != var2" endif ifneq ($(var2),) @echo "var2 is NOT empty" else @echo "var2 is empty" endif ifdef var2 @echo "var2 is NOT empty" else @echo "var2 is empty" endif ifndef var3 @echo "var3 is empty" else @echo "var3 is NOT empty" endif我们来看看编译结果
我们看到编译出错了,原因就是因为 ifeq 是规则而不是命令,所以它前面一定是空格而不是 Tab 键。下来我们换成空格来看看
我们看到编译已经通过了,而且也正常运行结束。变量 var2 就取的是 变量 var1 的值,因此在第一个它们的比较相等时肯定会输出相等;第二个用 var2 和空字符进行比较,那么 var2 肯定不为空;第三个就直接用 ifdef 关键字来进行判断 var2 是否存在了;最后一个 var3 肯定为空了。根据一些前辈们的经验,总结以下的几条规则:a> 条件判断语句之前可以有空格,但不能有 Tab 字符('\t');b> 在条件语句中不要使用自动变量($@,$^,$<);c> 一条完整的条件语句必须位于同一个 makefile 中;d> 条件判断类似于 C 语言中的宏,预处理阶段有效,执行阶段无效;e> make 在加载 makefile 时,首先计算表达式的值(赋值方式不同,计算方式不同),根据判断语句的表达式决定执行的内容。
那么我们来看看下面的代码输出相同吗?
.PHONY : te var1 := var2 := $(var1) var3 = var4 = $(var3) test : ifdef var1 @echo "var1 is defined" else @echo "var1 is NOT defined" endif ifdef var2 @echo "var2 is defined" else @echo "var2 is NOT defined" endif ifdef var3 @echo "var3 is defined" else @echo "var3 is NOT defined" endif ifdef var4 @echo "var4 is defined" else @echo "var4 is NOT defined" endif我们看着两个没啥差别,结果应该是一样的,都是输出的是空的。我们来看看编译结果
那么我们看到前三个是空的,var4 竟然不为空。我们来仔细看下,在 var1 和 var2 的定义中都是直接赋值(:=);而 var3 和 var4 是递归赋值(=)。在编译器看来 var4 是有值的,只不过在编译阶段不确定它的值究竟是什么而已。我们在下面加上 var3 = A,给 var3 一个具体的值,试试看效果是不是一样的。
效果是一样的。因此我们在 makefile 中不推荐递归赋值的这种写法,容易造成误解。通过对条件判断语句的学习,总结如下:1、条件判断根据条件的值来决定 make 的执行;2、条件判断可以比较两个不同变量或者变量和常量值;3、条件判断再预处理阶段有效,执行阶段无效;4、条件判断不能控制规则中命令的执行过程。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
名称栏目:条件判断语句(七)-创新互联
网站链接:http://lswzjz.com/article/cdoiig.html