【问题标题】:How can I make colcon work with a plain preset-based CMake project with multiple presets in parallel?如何使 colcon 与基于预设的普通 CMake 项目一起工作,并同时使用多个预设?
【发布时间】:2022-06-23 17:56:07
【问题描述】:

序幕

我有一个 preset-based 普通 CMake 项目,以便我可以使用 cmake --preset $PRESET && cmake --build --preset $PRESET && ctest --preset $PRESET 构建和测试它。请注意,它可以很好地与 Microsoft's CMake Tools extension for Visual Studio Code 交互,用于构建、测试、调试和 Intellisense。

由于我想并行处理多个预设,我将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 是顶部 CMakeLists.txt 中 CMake 的 project() 命令的参数。

如何解决此警告以及随后的构建失败?

【问题讨论】:

    标签: cmake build cmake-presets


    【解决方案1】:

    简单的解决方案

    不设置 CMakePresets.jsonbinaryDir 属性完全适用于 colcon,但不允许并行进行多个预设构建。

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

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

    解决方案是将正确的构建基础传递给 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"

    【讨论】:

      猜你喜欢
      • 2022-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多