CMake中函式引數問題

2021-10-11 07:24:15 字數 2938 閱讀 1601

cmake中function函式的定義:

function

([arg1 [arg2 [arg3 ...

]]])

command1

(args ...

) # 命令語句

command2

(args ...

)...

function

()

系統為我們提供了一些特殊的變數:

變數說明

ar**#

#是乙個下標,0指向第乙個引數,累加

ar**

所有的定義時要求傳入的引數

argn

定義時要求傳入的引數以外的引數

argc

傳入的實際引數的個數,也就是呼叫函式是傳入的引數個數

函式就是使用變數,在命令中途可以對改變量進行修改

例一:

cmake_minimum_required

(version 3.5

)set

(var "abc"

)function

(foo arg)

message

("arg = $"

)set

(arg "abc"

)message

("# after change the value of arg."

)message

("arg = $"

)endfunction()

message

("=== call function ==="

)foo($)

message

("outer arg = $"

)message

("var = $"

)

執行結果:

==

= call function ==

=arg = abc

# after change the value of arg.

arg = abc

outer arg =

var = abc

例二:

cmake_minimum_required

(version 3.5

)set

(var "abc"

)function

(foo arg)

message

("arg = $"

)set

(arg "abc"

)message

("# after change the value of arg."

)message

("arg = $"

)endfunction()

message

("=== call function ==="

)foo

(var)

message

("outer arg = $"

)message

("var = $"

)

執行結果:

==

= call function ==

=arg = var

# after change the value of arg.

arg = abc

outer arg =

var = abc

例三:

cmake_minimum_required

(version 3.5

)set

(var "abc"

)function

(foo arg)

if(arg strequal "abc"

)message

("arg1 = $"

)endif()

if($ strequal "abc"

)message

("arg2 = $"

)endif()

endfunction()

message

("=== call function ==="

)foo($)

message

("outer arg = $"

)message

("var = $"

)

執行結果:

==

= call function ==

=arg1 = abc

arg2 = abc

outer arg =

var = abc

對於cmake中的function函式,當呼叫的時候如果使用的是set出來的變數,都必須通過${}將變數的內容傳遞進去,而不能只寫上變數名。舉例:foo($)cmake中的function函式,引數傳遞是值拷貝的方式,在命令中途可以對改變量進行修改(因為是單向值傳遞,僅在函式的作用域內生效,例如最後一行的message("var = $")中的var值還是abc)。

cmake中的function函式可通過${}取出內容,也可以直接通過變數名取出內容。例如在函式內的

if

(arg strequal "abc"

)message

("arg1 = $"

)endif()

if($ strequal "abc"

)message

("arg2 = $"

)endif

()

這兩句是等效的。

參考:【cmake】cmake中的include指令(.cmake檔案/macro巨集/function函式)

cmake函式引數解析

最近在遷移公司的make系統到cmake上,發現cmake的function引數很奇怪。例如,如果我們向乙個function傳遞list作為引數,在function中,形參會變成如下狀況 set src function tst arguments src list message src list...

cmake函式引數解析

最近在遷移公司的make系統到cmake上,發現cmake的function引數很奇怪。例如,如果我們向乙個function傳遞list作為引數,在function中,形參會變成如下狀況 set src function tst arguments src list message src list...

CMAKE引數參考

cmake引數參考 make install prefix mysql的安裝路徑 default charset 預設的伺服器編碼,default collation 也是關於編碼的 mysql datadir data目錄 mysql tcp port tcp ip埠,3306 mysql uni...