2014-03-18 50 views
11

我想創建一個cmake的功能:cmake的功能,參數和返回

function(test src_list dst_list) 
# do something 
endfunction() 

用法:

test(${my_list} chg_list) 

這意味着,my_list是幾個字段列表,chg_list將收到在測試功能內部修改的列表。

但它不工作,我怎麼可以在cmake中創建一個函數來做到這一點?

+6

問題是你沒有提供函數的代碼。是否有'set($ {dst_list} PARENT_SCOPE);'在裏面? – julp

回答

22

在CMake中,函數有各自的範圍,並且默認情況下,所有變量的修改都是本地的,除非您將CACHEPARENT_SCOPE作爲參數傳遞給set。在函數裏,如果你想修改主叫範圍的變量,你應該使用:

set(${dst_list} <something> PARENT_SCOPE) 

documentation

函數打開一個新的範圍:見set(var PARENT_SCOPE)瞭解詳情。

4

檢查你的功能內部是set()不是dst_list而是${dst_list}。您需要這個將數據返回到父範圍。

+0

或者只顯示我們的函數代碼。 – arrowd