我有以下设置:
- build/
- conanbuildinfo.cmake (generated)
- conanfile.py
- CMakeLists.txt
conan
命令在CMake之前运行,生成conanbuildinfo.cmake。其中包含要在以后的编译中使用的包含路径等。如果我更改了conanfile,我想再次触发conan,并从生成的忍者版本中重新运行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}
)
运行此脚本后是否有办法触发重新配置?
我尝试使用以下方法没有成功:
答案 0 :(得分:1)
execute_process
为什么不起作用?
在我看来,如果您使用execute_process
(不是 add_custom_command
)来运行conan / reconfigure.py
的任何CMake逻辑之前,这应该可行取决于其输出,结合将该命令的输入文件添加到CMAKE_CONFIGURE_DEPENDS
。
尝试运行之前 CMake无法正常工作……但是无论如何,您都不需要这样做。我认为您的问题是您正在尝试解决错误的问题。相反,将其视为:a)您想在CMake执行期间运行 ,并且b)如果您的“ conanfile”发生更改,您想重新运行 CMake 。重新运行CMake将重新运行柯南。