在cmake中if語法比較簡單,if後面括號中的引數隨著cmake版本的推進,在else和endif中也可以不用寫了。
if(address)對於if語法,比較常用的就是字串比較了,這裡個人簡單用到過兩種,一種是這個變數有沒有定義過。有兩種寫法可以驗證else()
endif()
if(defined address)else()
endif()
if(address)兩種都可以驗證這個變數有沒有定義過,注意:是定義過,比如你在cmake命令列中隨便寫了-daddress=***,就表示定義過了,對裡面的值沒有任何要求。else()
endif()
第二中常用的用法就是字串比較,比如
if($ strequal "on")當然去掉大括號也是可以比較的else()
endif()
if(address strequal "on")這種就是比較字串的值了,注意:在這個時候,你的指令碼已經假設你對於address已經有了已被定義的預設要求,也就是說此時如果你沒有定義過address變數,在正常處理cmake ..的時候會報錯,會提示無法識別的引數「strequal」和"on",這個需要特別注意。還有就是如果真的要加上大括號來取值,適當加上雙引號可以防止出現一些不必要的麻煩。else()
endif()
有的同學會問了,如果我就想有個預設值呢?如果我就想,當我自己不去設這個,我希望它存在,被定義過,並且有個自己的預設值,有沒有辦法?
答案當然是有的,強大的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 $")
if(address)
message("defined address!!!!!!!!!!")
else()
message("not defined address!!!!!!!!!")
endif()
not defined address!!!!!!!!!!這樣就比較好理解了。option is a
defined address!!!!!!!!!!
配合option和if一起使用,可以靈活多變的針對編譯環境做各種定製化處理,包括專案中巨集的各種替換和使用等等。這裡我給大家開了個簡單的頭,希望這篇文章能夠給你帶來哪怕只有一點點的幫助就夠了 : )
option與option之間傳值(傳遞多個值)
function movelist from,to function move fromarray,to 得到在option中的位置 var selectoptionvalue fromarray.value var selectoptionname fromarray.text 得到去向處的opt...
brodcastReceiver註冊與使用
1 四大元件 activity service contentprovider brodcastreceiver 之一 2 靜態註冊與動態註冊區別 靜態註冊方式 指明你要監聽的廣播 靜態廣播由系統託管,時刻活躍著。動態註冊方式 mbroadcasereceiver receiver new mbro...
powerdesigner與mysql使用經驗
1.設定cdm生成pdm時的錯誤檢查 tools check model 2.如何防止一對一的關係生成兩個引用 外來鍵 要定義關係的支配方向,佔支配地位的實體 有d標誌 變為父表。在cdm中雙擊一對一關係 detail dominant role選擇支配關係 3.powerdesigner8中的cd...