命令 if
在cmake中if語法比較簡單,if后面括號中的參數隨着cmake版本的推進,在else和endif中也可以不用寫了。
對於if語法,比較常用的就是字符串比較了,這里個人簡單用到過兩種,一種是這個變量有沒有定義過。有兩種寫法可以驗證。
1. 方法
if(DEFINED address) else() endif()
2. 方法
if(address) else() endif()
這種就是比較字符串的值了,注意:在這個時候,你的腳本已經假設你對於address已經有了已被定義的默認要求,也就是說此時如果你沒有定義過address變量,在正常處理cmake ..的時候會報錯,會提示無法識別的參數“STREQUAL”和"ON",這個需要特別注意。還有就是如果真的要加上大括號來取值,適當加上雙引號可以防止出現一些不必要的麻煩。
有的同學會問了,如果我就想有個默認值呢?如果我就想,當我自己不去設這個,我希望它存在,被定義過,並且有個自己的默認值,有沒有辦法?
答案當然是有的,強大的CMake為我們准備了--option這個命令,給我們作為默認初始值並且作為定義值的候選。
option(address "This is a option for address" ON)
此時表示,如果用戶沒有定義過address,那我address的默認值就是ON,如果用戶在命令行顯示改變過address的值比如為OFF,那么在腳本中address的值就是OFF。
有一個需要注意,就是對於那些依賴於address有沒有定義過的時候,如果你用了option你要特別注意,就是在腳本處理過程中,如果你沒有在命令行中顯示定義過address,那么在option之前的語句對於address都是沒有定義過,直到到達了option,此時才真正定義了address.說起來不好理解,給個例子
if(address) message("defined address!!!!!!!!!!") else() message("NOT defined address!!!!!!!!!") endif() option(address "hello world" ON) message("option is ${address}") if(address) message("defined address!!!!!!!!!!") else() message("NOT defined address!!!!!!!!!") endif()