当前位置:网站首页 > 大数据架构 > 正文

cmake 多项目(cmake大型项目)



前言:

学习笔记,随时更新。如有谬误,欢迎指正。


说明:

  1. 红色字体为较为重要部分。
  2. 绿色字体为个人理解部分。

集成开发环境( IDE )可能希望与 CMake 集成,以改善 CMake 用户的开发体验。本文档列出了推荐的此类集成的最佳实践。

许多 IDE 供应商都希望在他们的 IDE 中捆绑一个 CMake 的副本。捆绑 CMake 的 IDE 应该向用户提供使用外部 CMake 安装的选项,而不是捆绑的版本,以防捆绑的版本过时而用户想要使用更新的版本。

虽然 IDE 供应商可能会尝试将不同版本的 CMake 与他们的应用程序捆绑在一起,但不建议这样做。 CMake 有很强的向后兼容性保证,没有理由不使用比项目要求的更新版本的 CMake ,或者实际上是最新版本。因此,建议将 CMake 与应用程序捆绑在一起的 IDE 供应商在发布时总是包含最新的 CMake 补丁版本。

有一个建议, IDE 也可以在 CMake 中附带一个 Ninja 构建系统的副本。 Ninja 在所有支持 CMake 的平台上都具有高性能和良好的支持。绑定 Ninja 的 IDE 应该使用 Ninja 1.10 或更高版本,它包含了支持 Fortran 构建所需的特性。

CMake 支持一种叫做 CMakePresets.json 的文件格式。它还有用户特定的对应项 CMakeUserPresets.json 。该文件包含有关用户可能需要的各种配置预设的信息。每个预设可能有不同的编译器、构建标志等。该格式的详细信息在 cmake 手册中有解释。

我们鼓励 IDE 供应商以与 CMake 相同的方式读取和评估该文件,并向用户提供文件中列出的预设。用户应该能够看到(并可能编辑) CMake 缓存变量、环境变量和为给定预设定义的命令行选项。然后 IDE 应该基于这些设置构建适当的 cmake 命令行参数列表,而不是直接使用 --preset 选项。 --preset 选项的目的是仅是为命令行用户设计的方便的前端,而不应由 IDE 使用。

例如,如果一个名为 ninja 的预置文件指定 Ninja 作为生成器,并指定 ${sourceDir}/build 作为构建目录,而不是运行:

 

IDE 应该计算 ninja 预设的设置,然后运行:

 

在读取、解析和计算 CMakePresets.json 的内容时是直接的,它不是琐碎的。除了文档之外, IDE 供应商可能还希望参考 CMake 源代码和测试用例,以便更好地理解如何实现该格式。此文件为 CMakePresets 提供了一个机器可读的 JSON 模式。 IDE 供应商可能会发现这种格式对校验和提供编辑帮助很有用。

调用 cmake 来运行配置步骤的 IDE 可能希望接收有关构建将产生的产物的信息,以及用于构建产物的包含目录、编译定义等。这些信息可以通过使用文件 API 获得。文件 API 的手册包含有关该 API 以及如何调用它的很多信息。服务器模式在 CMake 3.20 中被移除,不应该在 CMake 3.14 或更高版本中使用。

IDE 应该避免创建不必要的构建树,只有在用户希望切换到不同的编译器、使用不同的编译标志等情况下才会创建多个构建树。特别是, IDE 不应该创建多个除了不同的 CMAKE_BUILD_TYPE 之外,其他属性都相同的单配置构建树,而应该有效地创建一个多配置环境。为此,应该使用 Ninja 多配置生成器 和 文件 API 来获取构建配置列表。

IDE 不应该在 Makefile 或 Ninja 生成器中使用“额外的生成器”,它们会生成除了 Makefile 或 Ninja 文件之外的 IDE 项目文件。相反,应该使用文件 API 来获取构建产物列表。

如果使用 Makefile 或 Ninja 生成器来生成构建树,则不建议直接调用 make 或 Ninja 。相反,建议 ID E使用 --build 参数调用 cmake ,这将会反过来调用适当的构建工具。

如果使用了 IDE 项目生成器,例如 Xcode 或 Visual Studio 生成器之一,并且 IDE 理解所使用的项目格式, IDE 应该读取项目文件并以相同的方式构建它。

文件 API 可用于从构建树中获取构建配置列表, IDE 应将该列表显示给用户以选择构建配置。

ctest 支持输出 JSON 格式,其中包含有关的可用测试和测试配置的信息。想要运行 CTest 的 IDE 应该获取此信息,并使用它向用户显示测试列表。

IDE 不应该调用生成的构建系统的 test 目标。相反,它们应该直接调用 ctest 。

到此这篇cmake 多项目(cmake大型项目)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 中国大学慕课认证码身份证后六位不对(中国大学生慕课认证码)2024-12-05 11:27:08
  • 河北工业大学慕课认证码(河北工业大学查课表)2024-12-05 11:27:08
  • 华为模拟器命令大全(华为模拟器命令大全手机版)2024-12-05 11:27:08
  • 网站制作代码大全(网站制作代码大全软件)2024-12-05 11:27:08
  • 配置中心设计(配置中心架构)2024-12-05 11:27:08
  • Faiss 架构(das架构的缺点)2024-12-05 11:27:08
  • ceph存储搭建(ceph存储架构)2024-12-05 11:27:08
  • 苹果特殊符号大全怎么打的(iphone特殊符号怎么打)2024-12-05 11:27:08
  • 游戏代码网站链接(游戏代码网站链接大全)2024-12-05 11:27:08
  • uchar最大255(uchar最大值是多少)2024-12-05 11:27:08
  • 全屏图片