CMake筆記 簡單語法

2021-10-25 18:46:02 字數 3389 閱讀 6608

#
command(引數1 引數2 ...)
a;b;c d #用分號或者空格分割
set(var a b c)

#設定變數var

command($)

#引用變數var的值,等價於command(a b c)

command(

"$")

#等價於 command("a b c")

command(

"/$"

)#使用轉義,和 a b c無關聯

if (expression)

command1(args ...)

command2(args ...)

...else (expression)

command1(args ...)

command2(args ...)

...endif (expression)

# 一定要有endif與if對應

if (expression), 當expression不為:空,0,n,no,off,false,notfound或_notfound這些值時為真,否則為假

if (not exp),與上面相反

if (var1 and var2)

if (var1 or var2)

if (command cmd) ,如果cmd確實是命令並可呼叫,為真

if (exists dir) if (exists file) ,如果目錄或檔案存在,為真

if (file1 is_newer_than file2),當file1比file2新,或file1/file2中有乙個不存在時為真,檔名需使用全路徑

if (is_directory dir) ,當dir是目錄時,為真

if (defined var) ,如果變數被定義,為真

if (var matches regex) ,此處var可以用var名,也可以用$

if (string matches regex),當給定的變數或者字串能夠匹配正規表示式regex時為真。

比如:

if (

"hello" matches "ell"

) message(

"true"

)endif (

"hello" matches "ell"

)

數字比較表示式

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)

乙個小例子,用來判斷平台差異:

if (win32)

message(status 「this is windows.」)

else (win32)

message(status 「this is not windows」)

endif (win32)

上述**用來控制在不同的平台進行不同的控制,但是,閱讀起來卻並不是那麼舒服,else(win32)之類的語句很容易引起歧義。

可以set(cmake_allow_loose_loop_constructs on)

這時候就可以寫成:

if (win32)

else (

)endif (

)配合elseif使用,可能的寫法是這樣:

if (win32)

#do something related to win32

elseif (unix)

#do something related to unix

endif (win32)

其真假判斷條件可以參考if指令。

while(condition)

command1(args ...)

command2(args ...)

...endwhile(condition)

foreach指令的使用方法有三種形式:

1.列表語法

foreach(loop_var arg1 arg2 ...)

command1(args ...)

command2(args ...)

...endforeach(loop_var)

示例

aux_source_directory(. src_list)

foreach(f $

) message($)

endforeach(f)

2.範圍

語法

foreach(loop_var range total)

command1(args ...)

command2(args ...)

...endforeach(loop_var)

示例:

從0到total以1為步進

foreach(var range 10)

message($)

endforeach(var)

輸出:012345678910

3.範圍和步進

語法:

foreach(loop_var range start stop [step]

) command1(args ...)

command2(args ...)

...endforeach(loop_var)

從start開始到stop結束,以step為步進,注意:直到遇到endforeach指令,整個語句塊才會得到真正的執行。

foreach(a range 5 15 3)

message($)

endforeach(a)

輸出:581114

參考:cmake筆記(1)簡單語法

CMake基本語法

型別 分類 bool string path filepath 配置變數型別 list 轉換 推導 具名 宣告週期 set 宣告,unset取消 定義乙個變數 判斷是否定義用defined set 變數名 變數值 引用乙個變數 取消乙個變數 unset 變數名 內部變數 系統環境變數 env 工程源...

Cmake語法詳解

一 什麼是cmake 在android studio 2.2及以上,構建原生庫的預設工具是cmake。cmake是乙個跨平台的構建工具,可以用簡單的語句來描述所有平台的安裝編譯過程。能夠輸出各種各樣的makefile或者project檔案。cmake並不直接構建最終的軟體,而是產生其他工具的腳步 如...

Cmake之基本語法

cmake注意就是乙個cmakelists.txt.參考下面 下面開始乙個乙個語法的研讀 cmake minimum required version 3.5 檢查cmake的版本,至少為3.5 cmake policy set cmp0025 new 暫時步研究,看不懂 project absl ...