如何从目标触发 CMake 重新配置?
How to trigger CMake reconfiguration from a target?
我有以下设置:
- build/
- conanbuildinfo.cmake (generated)
- conanfile.py
- CMakeLists.txt
conan
命令在 CMake 之前运行,生成 conanbuildinfo.cmake。这包含稍后编译期间要使用的包含路径等。如果我更改 conanfile,我想再次触发柯南并从生成的忍者版本中重新运行 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}
)
有没有办法在运行此脚本后触发重新配置?
我尝试使用以下方法,但没有成功:
- CMAKE_CONFIGURE_DEPENDS
- 从 reconfigure.py 脚本运行 cmake
- 从 reconfigure.py 脚本中触摸主 CMakeLists.txt
- 使用execute_process运行脚本
为什么execute_process
不起作用?
在我看来,如果您使用execute_process
(而不是add_custom_command
(在任何依赖于其输出的 CMake 逻辑之前运行 conan/reconfigure.py
,并结合将该命令的输入文件添加到CMAKE_CONFIGURE_DEPENDS
中,这应该有效。
尝试在 CMake之前运行某些东西是行不通的......但无论如何,你不需要这样做。我认为你的问题是你试图解决错误的问题。相反,将其视为 a( 您希望在 CMake 的执行期间运行某些内容,以及 b( 如果您想在"conanfile"发生变化时重新运行CMake。重新运行 CMake 将重新运行柯南。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 无法找到/读取配置文件.conf-FileIOException
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 一种在C++中读取TXT配置文件的简单方法
- 生成MRPT库时cmake配置失败
- FFMPEG配置文件级别id大小无效
- 如何通过Conan和CMake找到用于pkg配置的.pc文件
- 配置文件解析器仅返回以前的值
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 是否可以配置提升日志刷新?
- 如何配置Visual Studio Code以使用cygwin,cmake和gcc进行调试
- C/C++:打印(配置)头文件的内容
- 配置:错误:找不到 MySQL 包含目录
- 如何在不创建新配置的情况下对两个不同解决方案使用的一个项目使用不同的 #defines
- VPN管理代理总是返回零配置文件,而且我似乎无法创建新的配置文件
- 预处理器定义/添加新配置文件
- 我可以同时使用属性文件和运行时配置配置log4cxx吗?
- 在新OCV 2.4.3中配置相机属性
- 当我开始一个新项目时,Visual Studio 2012会忘记SDL配置