首页 > 解决方案 > 如何从目标触发 CMake 重新配置?

问题描述

我有以下设置:

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

在 CMake 之前运行一个conan命令,生成 conanbuildinfo.cmake。这包含稍后在编译期间使用的包含路径等。如果我更改 conanfile,我想再次触发 conan 并从生成的 ninja build 重新运行 CMake。我有一个可以调用柯南的脚本,它会正确更新所有内容。但是,这发生在运行 CMake 之后,即使更改了 conanbuildinfo,CMake 也不会再次运行。这会导致忍者“看不到”依赖图中的更改,因此它不会重建它必须重建的所有内容。这意味着我必须运行ninja两次才能更新所有内容。我目前触发重新配置的方式是这样的:

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}
)

运行此脚本后有没有办法触发重新配置?

我尝试使用以下内容但没有成功:

标签: c++cmakeconan

解决方案


为什么没有execute_process工作?

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

尝试在 CMake之前运行某些东西是行不通的……但无论如何,你不需要这样做。我认为你的问题是你试图解决错误的问题。相反,将其视为 a) 您想在 CMake 执行期间运行某些东西,并且 b)如果您的“conanfile”发生更改,您希望重新运行CMake 。重新运行 CMake 将重新运行柯南。


推荐阅读