【问题标题】:CMakePresets.json vs CMakeSettings.json vs CMakeLists.txtCMakePresets.json 与 CMakeSettings.json 与 CMakeLists.txt
【发布时间】:2023-02-09 05:09:50
【问题描述】:

我在谷歌上搜索了一下,但没有发现任何真正令人满意的东西。上面有很多教程如何使用它们,但我很难理解哪个一个最适合特定项目。

我不是很清楚,对于他们每个人,我应该用来做什么。据我了解(这可能不正确),它们在某些功能上都有重叠,例如定义环境或 CMake 变量。

我一般理解的是 CMakePresetsCMakeSettings 是 Microsoft工具(也许工具不是正确的词,但我想不出更好的词)用于在 MS IDE(VS 和 VSCode)中集成 CMake 项目。他们如何应对CMakeLists以及每个人的范围是什么?

【问题讨论】:

    标签: cmake cmake-presets


    【解决方案1】:

    每个项目需要拥有配置 CMake 项目的 CMakeLists.txt 文件。您可以通过关注the official CMake tutorial 逐步了解更多信息。 Here's a tutorial on CMakeLists.txt files by CLion

    CmakePresets.json 是可选的 CMake 功能。它不是(正如您猜想的那样)Microsoft 特定的工具。它是一种工具,允许为通常一起使用的配置、构建、测试和打包设置编写预设。这就是它的用处。前任。填写option()变量(即定义的在项目的 CMakeLists.txt 文件中)。预设基本上是一种工具,无需为常见用户场景编写许多共同使用的命令行参数,而是为它们提供快捷方式/别名。

    CMakeSettings.json 特定于 Visual Studio。您可以在专门使用 Visual Studio 构建项目时使用它。它具有与 CMakePresets.json 文件类似的功能,但更适合与 Visual Studio IDE 配置一起使用。


    这是什么是预设以及它们何时有用的类比:想象一个项目就像一家三明治店,您可以在三明治中选择您想要的成分(配置项目构建时您想要选择的选项)。假设一家三明治店有(在许多其他配料中)培根、生菜、西红柿和黄瓜,这些都是您喜欢在三明治中加入的配料。可供选择的所有可能成分的列表是 CMakeLists.txt 文件。店家注意到很多人喜欢点培根、生菜、西红柿三明治,所以做了一个预设:“B.L.T.”。所以现在,您可以更快地告诉他们您想要什么:除了培根、生菜、西红柿和黄瓜,您可以说:“我想要 B.L.T. 加洋葱”。现在想象一家不同的商店,有更多的原料,而你经常用更多的原料订购同样的东西。你能看出这有什么用吗?现在 - 并非所有客户通常都想要同样的东西,“官方”预设由店主决定(项目维护人员将 CMakePresets.json 文件提交到他们的项目回购),但您可能想要一些自定义预设。这就是 CMakeUserPresets.json 文件的用途(从未承诺项目回购。在.gitignore)。

    那么,如果您选择创建一个设置,您如何选择将哪些设置放入 CMakeLists.txt 与 CMakePresets.json 中?如果您 100% 确定某物(CMake 变量、环境变量等)的一个特定值将始终是要使用的所需值,并且没有人会想要任何不同的值,那么将其硬编码到 CMakeLists.txt 中。否则,请使用适当的机制(例如 option()if(DEFINED ...))在 CMakeLists.txt 中定义具有可覆盖默认值的设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多