2011-12-12 125 views
18

像這樣:如何從命令行獲取CMake變量?

cmake --get-variable=MY_CMAKE_VARIABLE 

變量可能存在於一個包括CMake的文件。

+1

問題有點不清楚:您是否希望在命令行中指定變量的值?還是你想從一些CMakeFile中提取一個現有的變量,並將cmake打印到標準輸出? –

回答

15

如果您有現成的緩存文件,你可以這樣做:

grep MY_CMAKE_VARIABLE CMakeCache.txt 

如果您還沒有一個緩存文件,你希望看到什麼選項有一個的CMakeLists.txt文件,你可以做(​​在不同的目錄,因爲這會寫一個緩存文件):

cmake -L /path/to/CMakeLists.txt | grep MY_CMAKE_VARIABLE 

將返回到你喜歡

東西

如果它是高級變量,請將-A標誌添加到相同的命令中,並且它將包含高級變量。當然,如果你只想要的值,你可以這樣做:

cmake -L /path/to/CMakeLists.txt | grep MY_CMAKE_VARIABLE | cut -d "=" -f2 

編輯

例如,用的CMakeLists.txt是:

cmake_minimum_required(VERSION 2.8) 

project(test) 

include(otherFile.txt) 

set(MY_VAR "Testing" CACHE STRING "") 

哪裏otherFile。 txt是:

set(MY_OTHER_VAR "Hi" CACHE STRING "") 

該命令(從另一個目錄運行):

cmake -L ../cmaketest 

給出:

-- The C compiler identification is GNU 
-- The CXX compiler identification is GNU 
-- Check for working C compiler: /usr/bin/gcc 
-- Check for working C compiler: /usr/bin/gcc -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Check for working CXX compiler: /usr/bin/c++ 
-- Check for working CXX compiler: /usr/bin/c++ -- works 
-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/tgallagher/cmaketest-build 
-- Cache values 
CMAKE_BUILD_TYPE:STRING= 
CMAKE_INSTALL_PREFIX:PATH=/usr/local 
MY_OTHER_VAR:STRING=Hi 
MY_VAR:STRING=Testing 

所以,它只表示來自其他文件的變量。它應該解析整個構建。但問題是它不會顯示任何未用CACHE標記的變量。它不會顯示任何緩存的INTERNAL,並且只會顯示ADVANCED,如果使用-LA而不是-L。

如果你的變量標記爲INTERNAL或根本沒有CACHE'd,那麼CMake中沒有任何方法可以將它拉出來。但是,非CACHE的變量是暫時的,所以我不確定爲什麼你會在構建環境之外需要它們。

+0

非這些建議似乎適用於其他CMakeFiles包含的變量 – Allan

+0

添加了一個包含其他cmake文件的工作示例。你想達到什麼目的?也許有另一種方法,或者設置變量的方法,以便您可以使用上述方法。 – tpg2114

-1

-D <var>:<type>=<value>

當CMake的是一個空的構建樹第一次運行時,它會創建一個CMakeCache.txt文件,併爲項目自定義設置填充它。該選項可用於指定優先於項目默認值的設置。該選項可以根據需要重複多次緩存條目。

+1

這不是OP詢問的問題 –

2

如果您需要得到非緩存用戶變量,但不能編輯原始的cmake腳本,您可以訴諸技巧。在下面的內容的另一個目錄中創建新的CMakeLists.txt文件:

include(<Path to original CMakeLists.txt>) 

message(STATUS "MY_VAR={${MY_VAR}}") 

這是很可能,在cmake的新目錄,運行時會做了很多錯誤的。相對路徑(如果在原始腳本中使用)絕對是導致此類錯誤的原因。但cmake會打印爲您的變量分配的最後一個值。此外,過濾所有的錯誤和使用任何衆所周知的文字處理器警告(假定UNIX熟悉的),例如:

cmake . | sed -n 's/-- MY_VAR={\(.*\)}/\1/p' 2>&1 

我用在項目維護腳本這種方法,它是可靠的,只要原來的CMakeLists.txt沒有語法錯誤。

1

用途:

cmake -LA -N /path/to/project 

讓所有的緩存值的列表。 -N很重要;它阻止cmake嘗試生成任何構建文件,並向您顯示緩存中的內容。