我最近將一些項目從autotools切換到cmake。cmake - 獲取使用的命令行標誌「-D」
我在autotools上喜歡的一件常見事情是 - 如果我進入src構建目錄。有config.log/config.status - 在頂部列出了./configure --params
命令 - 因此很容易重新運行以前使用的命令行標誌。
(如編譯一些東西后 - 我想補充一個又一個--enable-this
- 所以從的config.log /狀態複製粘貼& - 並重新運行./configure --old-params --enable-this
)
在cmake的 - 我有一堆-D
標誌 - 我怎麼能找到像config.log /狀態中使用的命令行 - 用cmake項目?
我知道還有就是CMakeCache ... - 但它很難提取使用標誌
編輯:
我想出了以下解決方案:
#save commandline to rebuild this :)
set(USED_CMD_LINE "cmake ")
set(MY_CMAKE_FLAGS CMAKE_BUILD_TYPE CMAKE_INSTALL_PREFIX ENABLE_SSL ENABLE_LUA ENABLE_SSH ENABLE_SNMP MYSQL_USER MYSQL_PASS MYSQL_HOST MYSQL_DB FULL_FEATURES USE_COVERAGE)
FOREACH(cmd_line_loop IN ITEMS ${MY_CMAKE_FLAGS})
if(${cmd_line_loop})
STRING(CONCAT USED_CMD_LINE ${USED_CMD_LINE} "-D" ${cmd_line_loop} "=" ${${cmd_line_loop}} " ")
endif()
ENDFOREACH(cmd_line_loop)
STRING(CONCAT USED_CMD_LINE ${USED_CMD_LINE} " .. ")
#store to a file aka "config.status"
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/config.status ${USED_CMD_LINE})
創建build文件夾中的文件config.status - 包含所有設置的cmake參數。
親:
- 似乎解決我的問題
- 似乎對後續的cmake工作電話
CON:
- 無法設置文件模式上
FILE(write
?變量 MY_CMAKE_FLAGS
包含已知的標誌 - 需要手動 更新,如果一個新的標誌被添加
問候
這是一個很好的問題 - 一個我有一對夫婦的年,但並沒有要求在計算器上。我不認爲有一種方法可以在調用cmake時使用-D標誌集。下面給出的答案顯示瞭如何查看cmake調用結果的確切命令,但是這並不能給出用於cmake configure調用的參數。一個正確的答案比人們想象的要困難得多,因爲用戶可以使用'cmake -Danotherflag = value .'不斷重新配置cmake構建目錄。 – Phil
多數民衆贊成在悲傷!事實上,我真的很喜歡cmake,它解決了像autotools一樣的3.5mio問題(我學會了解決這個問題) - 但是缺少獲取用戶提供的命令行標誌,實在是太糟糕了。 –
看到我編輯的問題 - 它替代我解決我的問題(反正不完美的方式) –