CMake的條件敘述為 if、elseif、else、endif。
# 當 expr 值為下列其中之一時,執行 command1: # ON, 1, YES, TRUE, Y # 當 expr 值為下列其中之一時,執行 command2: # OFF, 0, NO, FALSE, N, NOTFOUND, *-NOTFOUND, IGNORE if(expr) command1(arg) else(expr) command2(arg) endif(expr)
else中的expr可不填,這樣比較不會有語意上的誤會,例如:
if(WIN32) command1(arg) else(WIN32) command2(arg) endif(expr)以為WIN32為真時執行command2...
# 下面兩行意義相同 if (foo) if (${foo})實務上個人覺得還是加比較好,可從語法上就得知這個是變數,不會誤以為是個字串。
迴圈:
CMake 的迴圈有兩種:
foreach ... endforeach
while ... endwhile
set(V alpha beta gamma) message(${V}) foreach(i ${V}) message(${i}) endforeach()Output:
alphabetagamma alpha beta gamma函數與巨集: CMake 有兩種設計子程序的方式:
function ... endfunction
macro ... endmacro
主要的差別在於 function 會建立 local的變數,而 macro 則會影響 global 變數。
# 定義名為 print1 的 macro macro(print1 MESSAGE) set(k ${MESSAGE}) message(${MESSAGE}) endmacro(print1) # 定義名為 print2 的 function function(print2 MESSAGE) set(k ${MESSAGE}) message(${MESSAGE}) endfunction(print2) print1("from print1") print2("from print2") message("k=${k}") 輸出結果為 from print1 from print2 k="from print1"
沒有留言:
張貼留言