如何从目标触发 CMake 重新配置?

How to trigger CMake reconfiguration from a target?

我有以下设置:

- build/
    - conanbuildinfo.cmake   (generated)
- conanfile.py
- CMakeLists.txt

一个conan命令在CMake之前运行,生成conanbuildinfo.cmake。这包含稍后在编译过程中使用的包含路径等。如果我更改 conanfile,我想再次触发 conan 并从生成的忍者构建中重新 运行 CMake。我有一个可以调用柯南的脚本,它可以正确更新所有内容。然而,这发生在 CMake 为 运行 之后,即使 conanbuildinfo 已更改,CMake 也不会再次 运行。这会导致 ninja "not see" 依赖关系图中的更改,因此它不会重建它必须重建的所有内容。这意味着我必须 运行 ninja 两次才能更新所有内容。我目前触发reconfigure的方式是这样的:

set(DS_CONFIG_INDICATOR ${CMAKE_BINARY_DIR}/ds_configured)

add_custom_command(
  DEPENDS ${PROJECT_SOURCE_DIR}/conanfile.py
  OUTPUT ${DS_CONFIG_INDICATOR}
  COMMAND ${CMAKE_COMMAND} -E env --unset=PYTHONPATH ${PYTHON_BINARY} ${PROJECT_SOURCE_DIR}/scripts/common/reconfigure.py ${DS_CONFIG_INDICATOR} ${PROJECT_SOURCE_DIR}
  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  COMMENT "Checking if reconfigure is needed"
  USES_TERMINAL
)

add_custom_target(ConanReconfigure
  DEPENDS ${DS_CONFIG_INDICATOR}
)

有没有办法在这个脚本 运行 之后触发重新配置?

我尝试使用以下方法但没有成功:

为什么 execute_process 不起作用?

在我看来,如果你使用 execute_process (not add_custom_command) to 运行 conan/reconfigure.py 在依赖于其输出的任何 CMake 逻辑之前, 结合 将该命令的输入文件添加到 CMAKE_CONFIGURE_DEPENDS

尝试运行 之前 CMake 将无法工作...但无论如何您不需要这样做。我认为你的问题是你试图解决错误的问题。相反,将其视为 a) 你想 运行 在 CMake 的执行期间 一些东西,和 b) 你想重新 运行 CMake 如果您的 "conanfile" 发生变化。 Re-运行ning CMake 将重新运行 conan.