一. 简介
前面学习了 CMakeLists.txt语法中的 部分常用命令,常量变量,双引号的使用。
前面一篇文章也简单了解了 CMakeLists.txt语法中的条件判断,文章如下:
CMakeLists.txt语法规则:条件判断说明一-CSDN博客
CMakeLists.txt语法规则:条件判断中表达式说明一-CSDN博客
本文继续学习 CMakeLists.txt语法中的条件判断,主要学习 条件判断中的 表达式。
二. CMakeLists.txt语法规则:条件判断中的表达式
1. <expr1> OR <expr2>表达式
类似于 C 语言中的逻辑或(||),当 expr1 或 expr2 至少有一个为真时,条件判断为真;否则为假。
#输出为:false
if(false OR no)
message(true)
else()
message(false)
endif()
#输出为:true
if(yes OR no)
message(true)
else()
message(false)
endif()
#输出为:true
if(ON OR yes)
message(true)
else()
message(false)
endif()
2. COMMAND command-name 表达式
如果
command-name
是一个已经定义的命令、宏或函数时,条件判断为真;否则为假。
除了宏之外,在
cmake
中还可以定义函数,这个我们也会在后面向大家介绍。
#输出为:false
if(COMMAND yyds)
message(true)
else()
message(false)
endif()
#输出为:true
if(COMMAND project)
message(true)
else()
message(false)
endif()
3. TARGET target-name 表达式
如果
target-name
是
add_executable()
、
add_library()
或
add_custom_target()
定义的目标(这些目标在整个工程中必须是唯一的,不可出现两个名字相同的目标),则条件判断为真;否则为假:
#输出为:false
if(TARGET hello)
message(true)
else()
message(false)
endif()
#输出为:true
add_library(hello hello.c)
if(TARGET hello)
message(true)
else()
message(false)
endif()
4. EXISTS path 表达式
如果
path
指定的文件或目录存在,则条件判断为真;否则为假。
需要注意的是,
path
必须是文件或目录的全路径,也就是绝对路径。
譬如工程目录结构如下所示:
在顶层 CMakeLists.txt 文件中使用 if(EXISTS path)进行判断:
输出为:true
if(EXISTS ${PROJECT_BINARY_DIR})
message(true)
else()
message(false)
endif()
#输出为:true
if(EXISTS ${PROJECT_SOURCE_DIR}/hello)
message(true)
else()
message(false)
endif()
#输出为:false
if(EXISTS ${PROJECT_SOURCE_DIR}/world)
message(true)
else()
message(false)
endif()
#输出为:true
if(EXISTS ${PROJECT_SOURCE_DIR}/hello/hello.c)
message(true)
else()
message(false)
endif()
下一篇文章继续学习 条件判断中的表达式。