回答
如果您有現成的緩存文件,你可以這樣做:
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的變量是暫時的,所以我不確定爲什麼你會在構建環境之外需要它們。
當CMake的是一個空的構建樹第一次運行時,它會創建一個CMakeCache.txt文件,併爲項目自定義設置填充它。該選項可用於指定優先於項目默認值的設置。該選項可以根據需要重複多次緩存條目。
這不是OP詢問的問題 –
如果您需要得到非緩存用戶變量,但不能編輯原始的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沒有語法錯誤。
用途:
cmake -LA -N /path/to/project
讓所有的緩存值的列表。 -N很重要;它阻止cmake嘗試生成任何構建文件,並向您顯示緩存中的內容。
- 1. 如何從cmake-gui獲取cmake命令?
- 2. 如何捕獲CMake命令行參數?
- 3. 執行命令從變量
- 4. 如何從命令行設置CMake構建的線程數量?
- 5. 如何從命令行獲取NSUserDefaults
- 6. 從argparse中的變量而不是命令行獲取值
- 7. 如何從內核命令行提取根變量的值
- 8. 命令行變量不被dev_prod_switch拾取
- 9. 如何獲取在命令行執行的命令?
- 10. Windows命令行 - OUTPUTFILE名從變量
- 11. 直接運行命令VS從變量
- 12. 從bash命令行設置php變量
- 13. Cmake,Boost解析命令行
- 14. Cmake命令行太長windows
- 15. 在命令窗口中運行rcp時如何從命令行獲取參數?
- 16. Laravel env()或config()在命令行上獲取環境變量
- 17. 獲取命令行腳本的輸出作爲模板變量
- 18. 在C#中設置/獲取命令行系統變量
- 19. 使用Linux命令行獲取變量調用PHP頁面
- 20. 從命令行獲取陣列輸入
- 21. 從命令行獲取Java VisualVM數據
- 22. 從FileUtils獲取執行的命令?
- 23. 從命令行獲取輸入?
- 24. 從命令行獲取TCL的版本?
- 25. 從命令行獲取保管箱url
- 26. 從前端獲取命令行參數
- 27. Grails geb從命令行獲取參數
- 28. 如何從變量運行腳本命令?
- 29. 如何從命令行傳遞QMAKE變量?
- 30. 如何從PowerShell命令行回顯預定義變量?
問題有點不清楚:您是否希望在命令行中指定變量的值?還是你想從一些CMakeFile中提取一個現有的變量,並將cmake打印到標準輸出? –