网站布局设计,seo短视频网页入口引流免费,专业的网页设计服务,域名去哪里买以下内容源于C语言中文网的学习与整理#xff0c;非原创#xff0c;如有侵权请告知删除。 日常使用 Makefile 编译文件时#xff0c;可能会遇到需要分条件执行的情况。比如在一个工程文件中可编译的源文件很多#xff0c;但是它们的类型是不相同的#xff0c;所以编译文件…以下内容源于C语言中文网的学习与整理非原创如有侵权请告知删除。 日常使用 Makefile 编译文件时可能会遇到需要分条件执行的情况。比如在一个工程文件中可编译的源文件很多但是它们的类型是不相同的所以编译文件使用的编译器也是不同的。手动去编文件显然是不可行的而make 提供条件判断来解决这样的问题。Makefile 中使用条件控制可以做到处理的灵活性和高效性。 下面是条件判断中使用到的一些关键字 关键字功能ifeq判断参数是否不相等相等为 true不相等为 false。ifneq判断参数是否不相等不相等为 true相等为 false。ifdef判断是否有值有值为 true没有值为 false。ifndef判断是否有值没有值为 true有值为 false。
一、ifeq 和 ifneq 条件判断的使用方式如下 ifeq (ARG1, ARG2)
ifeq ARG1 ARG2
ifeq ARG1 ARG2
ifeq ARG1 ARG2
ifeq ARG1 ARG2 实例 libs_for_gcc -lgnu
normal_libs
foo:$(objects)
ifeq ($(CC),gcc) #括号和关键字之间要使用空格分隔两个参数之间要使用逗号分隔$(CC) -o foo $(objects) $(libs_for_gcc)
else$(CC) -o foo $(objects) $(noemal_libs)
endif 条件语句中使用到三个关键字“ifeq”、“else”、“endif”。其中“ifeq”表示条件语句的开始并指定一个比较条件相等。括号和关键字之间要使用空格分隔两个参数之间要使用逗号分隔。参数中的变量引用在进行变量值比较的时候被展开。“ifeq”下面的命令是条件满足的时候执行的条件不满足忽略“else”下面的命令表示当条件不满足的时候执行的部分不是所有的条件语句都要执行此部分“endif”是判断语句结束标志。 其实 ifneq 和 ifeq 的使用方法是完全相同的只不过是满足条件后执行的语句正好相反。 上面的例子可以换一种更加简介的方式来写 libs_for_gcc -lgnu
normal_libs
ifeq($(CC),gcc)libs$(libs_for_gcc)
elselibs$(normal_libs)
endif
foo:$(objects)$(CC) -o foo $(objects) $(libs) 二、ifdef 和 ifndef 它们的主要功能是判断变量的值是不是为空使用方式如下 ifdef VARIABLE-NAME 实例1 bar
foo $(bar)
all:
ifdef fooecho yes
elseecho no
endif#变量“foo”的定义是“foo $(bar)”
#虽然变量“bar”的值为空但是“ifdef”的判断结果为真所以结果是yes 实例 2 foo
all:
ifdef fooecho yes
elseecho no
endif#打印的结果是 no因为foo确实为空 执行 make 可以看到实例 1打印的结果是 yes 实例 2打印的结果是 no 。 在实例 1 中变量“foo”的定义是“foo $(bar)”虽然变量“bar”的值为空但是“ifdef”的判断结果为真。 这种方式判断变量的值是否为空显然不行因此当我们需要判断一个变量的值是否为空的时候需要使用“ifeq 而不是“ifdef”。 注意在 make 读取 Makefile 文件时才计算表达式的值并根据表达式的值决定判断语句中的哪一个部分作为此 Makefile 所要执行的内容。因此在条件表达式中不能使用自动化变量因为自动化变量在规则命令执行时才有效或者说自动化变量只能用在规则的命令中。更不能将一个完整的条件判断语句分卸在两个不同的 Makefile 的文件中。