2015-12-01 44 views
3

如果我做的:在當前範圍和PARENT_SCOPE中設置一個變量?

set(SourceDir ${CMAKE_CURRENT_SOURCE_DIR} PARENT_SCOPE) 
message("SourceDir: " ${SourceDir}) 

消息指出SourceDir是空的。據推測,它僅在父範圍內設置。有沒有辦法在當前範圍和父範圍中設置變量?所以我不必這樣做:

set(SourceDir ${CMAKE_CURRENT_SOURCE_DIR} PARENT_SCOPE) 
set(SourceDir ${CMAKE_CURRENT_SOURCE_DIR}) 
message("SourceDir: " ${SourceDir}) 

回答

1

我認爲你不能。該文檔說:

每個新的目錄或函數創建一個新的作用域。

如果我理解正確的話,當你SET被執行,其範圍已經被複制父範圍內創建。所以不管你對原來的做什麼(PARENT_SCOPE)你的本地範圍不會改變。

你最好問上CMake's user list的問題,以確認他們不這樣做回退到父時,在局部範圍內沒有定義的變量。如果他們這樣做,這是一個錯誤。

3

當您設置它PARENT_SCOPE,它不會爲當前範圍內做到這一點不知。但是兩個步驟的過程很有效。第一行設置在本地,第二行是出口到父範圍。

set (LIB_VER 6) 
set (LIB_VER ${LIB_VER} PARENT_SCOPE) 
+1

這就是我說的目標是要避免在原來的問題,對不對? –

相關問題