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)