【cmake】命令 if


命令 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()

 

參考資料

1. CMake----if與option使用小記


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM