CMake 入门/运算子

维基教科书,自由的教学读本

逻辑运算[编辑]

当 expr 值为 FALSE 时成立。

if(NOT <expr>)


当 expr1 和 expr2 同时为 TRUE 时成立。

if(<expr1> AND <expr2>)


当 expr1 和 expr2 至少其中之一为 TRUE 时成立。

if(<expr1> OR <expr2>)

比较运算[编辑]

数值比较

if(variable LESS number)
if(string LESS number)

if(variable GREATER number)
if(string GREATER number)

if(variable EQUAL number)
if(string EQUAL number)


字串比较

if(variable STRLESS string)
if(string STRLESS string)

if(variable STRGREATER string)
if(string STRGREATER string)

if(variable STREQUAL string)
if(string STREQUAL string)

字串比较依照 lexicographically order 决定大小。

LESS、GREATER、EQUAL、STRLESS、STRGREATER、STREQUAL 会分别检查左右算子是否为已定义过的变数,若是则采用变数值,否则采用字面值。

Regular Expression 比对[编辑]

if(variable MATCHES regex)
if(string MATCHES regex)

MATCHS 会先检查左方算子是否为已定义过的变数,若是则会比对变数储存的字串值,否则将整串符号当成字串处理。

档案相关[编辑]

判断档案和资料夹是否存在。行为只对完整路径是 well-defined。

if(EXISTS file-name)
if(EXISTS directory-name)


当 file1 比 file2 新,或者其中一个档案不存在时。行为只对完整路径是 well-defined。

if(file1 IS_NEWER_THAN file2)


判断给定的path是否是绝对路径。

if(IS_ABSOLUTE path)

其他[编辑]

判断给定的 command-name 是否属于指令、function、macro。

if(COMMAND command-name)


判断给定的 variable-name 是否已经被定义过。

if(DEFINED variable-name)