序曲
我有一个预置普通的CMake项目,这样我就可以用cmake --preset $PRESET && cmake --build --preset $PRESET && ctest --preset $PRESET构建和测试它。请注意,它与代码的CMake工具扩展很好地交互,无论是用于构建、测试、调试和智能感知。
由于我希望并行处理多个预设,所以我将CMakePresets.json的binaryDir属性设置为${sourceDir}/build/${presetName}/。
问题
我还想用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' variableroot_project_name是顶部CMakeLists.txt中CMake的project()命令的参数。
如何解决此警告和随后的构建失败?
发布于 2022-06-23 09:56:07
直白解
不设置CMakePresets.json的binaryDir属性对colcon很好,但不允许多个预置生成并行。
多个预设并行构建的解决方案
造成这种行为的原因是colcon核的build谓词将构建基目录(默认:build)以找到的包的名称(此处:root_project_name)后缀到科康-扩展这里。
解决方案是将正确的构建基传递给colcon (即colcon build --build-base ./build/$PRESET/ --cmake-args "--preset $PRESET"),并将CMakePresets.json的binaryDir属性调整为${sourceDir}/build/${presetName}/root_project_name/。
注意,这也适用于colcon test,即colcon test --build-base ./build/$PRESET/ --ctest-args "--preset $PRESET"。
https://stackoverflow.com/questions/72728214
复制相似问题