我最近将一些项目从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问题(我学会了解决这个问题) - 但是缺少获取用户提供的命令行标志,实在是太糟糕了。 –
看到我编辑的问题 - 它替代我解决我的问题(反正不完美的方式) –