makefile中使用条件判断语句
程序员文章站
2022-05-03 08:24:23
...
条件判断语句举例
Make 可以根据运行时不同情况选择执行不同分支。
libs_for_gcc = -lgnu
normal_libs =
foo : $(OBJS)
ifeq ($(CC), gcc) # 不缩进
$(CC) -o foo $(OBJ) $(libs_for_gcc) # 传递命令,缩进
else
$(CC) -o foo $(OBJ) $(normal_libs)
endif
注意:条件语句部分不需要缩进, 否则会被认为是传递给 shell 的命令。
简单地说,上面表达的是,如果使用的编译器是 gcc,则编译时添加参数libs_for_gcc,否则给另一个参数normal_libs。
条件判断语句的语法
# if-endif语句
conditional-directive
text-if-true
endif
# if-else-endif语句
conditional-directive
text-if-true
else
text-if-false
endif
# if-elsif0-elsif1..-elsifn-else-endif语句
conditional-directive-one
text-if-one-is-true
else conditional-directive-two
text-if-two-is-true
else
text-if-one-and-two-are-false
endif
# 多分支例子语句
ifeq $(STRING), 'AA'
echo AA
else ifeq $(STRING), 'BB'
echo BB
else
echo XX
endif
判断是否相等
ifeq (ARG1, ARG2)
ifeq 'ARG1' 'ARG2'
ifeq "ARG1" "ARG2"
ifeq "ARG1" 'ARG2'
ifeq 'ARG1' "ARG2"
# 对应
#ifneq与ifeq类似
判断是否定义
ifdef variable_name
ifndef variable_name
注意,ifdef只是测试一个变量是否有值,其并不会把变量扩展到当前位置。如下例:
bar =
foo = $(bar)
ifdef foo
# 展开 foo -> $(bar)
# 所以认为定义了, 即使 foo 最终是空
echo foo
endif
ifdef bar
# 展开 bar, 空,认为未定义
echo bar
endif
特别注意的是,make是在读取Makefile时就计算条件表达式的值,并根据条件表达式的值来选择语句,所以,你最好不要把自动化变量(如“[email protected]”等)放入条件表达式中,因为自动化变量是在运行时才有的。
对于嵌套 Makefile, 不允许一个完整的 if-endif 语句跨越两个 Makefile。
参考:
1.https://www.jianshu.com/p/5982ccb87af0
2.http://wiki.ubuntu.org.cn/%E8%B7%9F%E6%88%91%E4%B8%80%E8%B5%B7%E5%86%99Makefile:%E4%BD%BF%E7%94%A8%E6%9D%A1%E4%BB%B6%E5%88%A4%E6%96%AD
上一篇: 做了一个多图片删除按钮,点击剔除但每次只能删除一张
下一篇: 跳转activity的动画实现
推荐阅读
-
详解JavaScript中void语句的使用
-
mssql函数DATENAME使用示例讲解(取得当前年月日/一年中第几天SQL语句)
-
Mysql中的条件判断--ififnullcasewhen实例讲解
-
Nginx中if语句的判断条件与多条件判断详解
-
HTML中的Hack条件注释语句
-
如何在SQL SERVER 2005存储过程中,使用循环语句
-
Shell脚本的条件测试和if条件语句使用方法
-
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
-
对python中if语句的真假判断实例详解
-
mysql存储过程之引发存储过程中的错误条件(SIGNAL和RESIGNAL语句)实例分析