cmake - 获取使用过的命令行标志"-D"

Hel*_*hka 11 cmake

我最近将一些项目从autotools切换到了cmake.

我喜欢在autotools上的一个常见的事情是 - 如果我进入src构建目录.有config.log/config.status - 其中./configure --params列出了命令的顶部- 因此很容易重新运行以前使用过的命令行标志.

(比如在编译一些东西之后 - 我想添加另一个--enable-this- 所以从config.log/status复制和粘贴 - 然后重新运行./configure --old-params --enable-this)

在cmake中 - 我有一堆 -D标志 - 我怎样才能找到像config.log/status一样的使用命令行 - 用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} )
Run Code Online (Sandbox Code Playgroud)

在build文件夹中创建一个文件config.status - 包含所有set cmake params.

亲们:

  • 似乎解决了我的问题
  • 似乎适用于后续的cmake调用

CON:

  • 无法设置chmod FILE(write?变量
  • MY_CMAKE_FLAGS包含已知标志 - 如果添加了新标志,则需要手动更新

问候

sak*_*kra 1

CMAKE_EXPORT_COMPILE_COMMANDS一项可能有用的功能是打开项目 CMake 缓存中的标志。在构建过程中,这将使 CMakecompile_commands.json在二进制目录中生成一个 JSON 文件,其中包含所有翻译单元的确切编译器调用。

  • 感谢您的回答,很高兴了解“CMAKE_EXPORT_COMPILE_COMMANDS”,但它不能解决我的问题。 (2认同)