如何从目标触发 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}
)
有没有办法在这个脚本 运行 之后触发重新配置?
我尝试使用以下方法但没有成功:
- CMAKE_CONFIGURE_DEPENDS
- 运行 来自 reconfigure.py 脚本的 cmake
- 接触 reconfigure.py 脚本中的主要 CMakeLists.txt
- 使用 execute_process 到 运行 脚本
为什么 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.
我有以下设置:
- 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}
)
有没有办法在这个脚本 运行 之后触发重新配置?
我尝试使用以下方法但没有成功:
- CMAKE_CONFIGURE_DEPENDS
- 运行 来自 reconfigure.py 脚本的 cmake
- 接触 reconfigure.py 脚本中的主要 CMakeLists.txt
- 使用 execute_process 到 运行 脚本
为什么 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.