我如何使colcon与一个简单的基于预设的并行多个预设的CMake项目一起工作



序言

我有一个基于预设的普通CMake项目,这样我就可以用cmake --preset $PRESET && cmake --build --preset $PRESET && ctest --preset $PRESET构建和测试它。请注意,无论是用于构建、测试、调试还是Intellisense,它都能很好地与Microsoft针对Visual Studio Code的CMake Tools扩展进行交互。

由于我想并行处理多个预设,所以我将CMakePresets.jsonbinaryDir属性设置为${sourceDir}/build/${presetName}/

问题

我也想用colcon构建这个简单的CMake项目。colcon build --cmake-args "--preset $PRESET"不起作用,因为它产生

WARNING:colcon.colcon_cmake.task.cmake.build:Could not build CMake package 'root_project_name' because the CMake cache has no 'CMAKE_PROJECT_NAME' variable

root_project_name是CMake的project()命令在顶部CMakeLists.txt中的自变量。

如何解决此警告和随后的生成失败?

直接解决方案

完全不设置CMakePresets.jsonbinaryDir属性可以很好地使用colcon,但不允许并行进行多个预设构建。

具有多个并行预设构建的解决方案

这种行为的原因是colcon core的build谓词将以找到的包的名称(此处为:root_project_name)为后缀的构建基目录(默认值:build)传递给此处的colcon cmake扩展。

解决方案是将正确的构建基传递给colcon(即colcon build --build-base ./build/$PRESET/ --cmake-args "--preset $PRESET"),并将CMakePresets.jsonbinaryDir属性调整为${sourceDir}/build/${presetName}/root_project_name/

注意,这也适用于colcon test,即colcon test --build-base ./build/$PRESET/ --ctest-args "--preset $PRESET"

相关内容

  • 没有找到相关文章