微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ROS 顶层 CMakelists.txt 没有使用,如何给所有子项目的 cmake 默认值?

如何解决ROS 顶层 CMakelists.txt 没有使用,如何给所有子项目的 cmake 默认值?

我在 ROS REP 128 aka 中设置了一个工作区:

catkin_ws
   src
      CMakeLists.txt // < 1.
      project_1
          CMakeLists.txt
      project_2
          CMakeLists.txt
      ...

事实上,您可以仅使用 catkin 教程 here 来重现这一点。顶级 CMakeLists.txt(上例中的 1.)似乎没有来源。我可以这么说是因为我在它的末尾添加weifnbwefn 行,预计会出现 cmake 错误(在干净的构建中)但没有。

要重现这个:

  1. 克隆上述存储库。
  2. 导航到 catkin_tutorials/create_package_pubsub/catkin_ws
  3. 使用无法构建的内容修改 src/CMakeLists.txt
  4. 使用 catkin build 构建

所以这会导致两个问题:

  1. 为什么不使用这个文件
  2. 如何为我的所有子项目添加认的 cmake 项目?例如。如果我想为每个子项目添加 set(CMAKE_CXX_STANDARD 17)

对于 2. ,我知道我可以在 .catkin_tools 中向我的构建配置文件添加额外的 cmake args,但是对于任何比几个参数更复杂的东西,这将无法扩展。

解决方法

My understanding from the docssrc/CMakeLists.txt 旨在成为 ROS 安装中 catkin/cmake/toplevel.cmake 的符号链接,不可编辑。它仅在 CMake 推动旧版构建工作流程时使用。

catkin build 实现的新工作流程会忽略此文件,专门用于隔离构建并防止来自一个包设置 CMake 缓存变量的串扰,另一个读取。

这就是第 (1) 部分的答案,但遗憾的是,我对 catkin 的经验不足,无法知道存储通用配置的最佳做法是什么。我确实知道 --cmake-args 有一个 catkin build 标志,您可以将其与 CMAKE_PROJECT_INCLUDE 变量结合使用以注入包含您的设置的 CMake 文件。

特别是对于 C++17,这看起来像:

$ catkin build --cmake-args -DCMAKE_CXX_STANDARD=17

在此处查看相关文档:https://catkin-tools.readthedocs.io/en/latest/verbs/catkin_build.html#temporarily-changing-build-flags

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。