Buz*_*uzz 11 cmake cmake-presets
我用谷歌搜索了一下,但没有找到任何真正令人满意的东西。有很多关于如何使用它们的教程,但我很难理解哪一个最适合特定项目。
我不太清楚,对于他们每个人,我应该用来做什么。据我了解(这可能不正确),它们在某些功能上都有重叠,例如定义环境或 CMake 变量。
我通常的理解是 和CMakePresets是CMakeSettingsMicrosoft工具(也许工具不是正确的词,但我想不出更好的词),用于在 MS IDE(VS 和 VSCode)中集成 CMake 项目。他们如何应对CMakeLists以及各自的范围是什么?
sta*_*all 15
每个项目都需要有一个配置 CMake 项目的 CMakeLists.txt 文件。您可以按照官方 CMake 教程逐步了解更多信息。这是 CLion 提供的有关 CMakeLists.txt 文件的教程。
CMakePresets.json是可选的内置 CMake 功能。这不是微软特有的事情。它是一个允许编写通常一起使用的配置、构建、测试和打包设置的预设的工具。这就是它的用处。前任。填充option()变量(在项目的 CMakeLists.txt 文件中定义)或其他缓存和环境变量。预设基本上是一种工具,无需为常见用户场景编写许多常用的命令行参数,而是为它们提供快捷方式/别名。
CMakeSettings.json特定于 Visual Studio。您可以在专门使用 Visual Studio 构建项目时使用它。它具有与 CMakePresets.json 文件类似的功能,但更适合使用 Visual Studio IDE 配置。官方文档建议不再使用它,而改用 CMakePresets.json。
以下是关于预设是什么以及何时有用的类比:想象一个项目就像一家三明治店,您可以在其中选择三明治中想要的成分(在配置项目构建时要选择哪些选项)。假设一家三明治店有培根、生菜、番茄和黄瓜(以及许多其他成分),这些都是您喜欢在三明治中添加的成分。所有可能可供选择的成分的列表是 CMakeLists.txt 文件。店家发现很多人喜欢点培根、生菜、番茄一起做的三明治,于是就预设了一个:“BLT”。所以现在,您可以更快地告诉他们您想要什么:您可以说:“我想要一份带黄瓜的 BLT 培根生菜番茄酱”(例如cmake --preset=BLT -DWITH_CUCUMBERS=YES ...),而不是培根、生菜、番茄和黄瓜。现在想象一下一家不同的商店有更多的原料,并且您经常订购同样的东西有更多的原料。你能看出这有什么用处吗?现在,并非所有客户通常都想要相同的东西,并且“官方”预设由店主确定(项目维护者将 CMakePresets.json 文件提交到他们的项目存储库),但您可能想要一些自定义预设。这就是 CMakeUserPresets.json 文件的用途(从不提交到项目存储库。在 中.gitignore)。
那么,如果您选择创建 CMakeLists.txt 和 CMakePresets.json,如何选择将哪些设置放入 CMakeLists.txt 和 CMakePresets.json 中呢?如果您 100% 确定某事物(CMake 变量、环境变量等)的一个特定值将始终是要使用的所需值,并且没有人会想要任何不同的值,则将其硬编码在 CMakeLists.txt 中(例如. target_compile_features,当目标的接口或内部源需要使用/构建特定的语言版本时)。否则,使用适当的机制(例如set(... CACHE ...),,,)在 CMakeLists.txt 中定义具有可覆盖默认值的设置,并在配置时将选择权留给用户,如果有用,请提供一些预设位来帮助他们option()/if(DEFINED ...)你自己出去。
更多示例:以下是一些我通常不会在 CMakeLists.txt 文件中进行硬编码的内容,但我会放入某些预设:CMAKE_CONFIGURATION_TYPES、CMAKE_EXPORT_COMPILE_COMMANDS、CMAKE_COLOR_DIAGNOSTICS、CMAKE_DEFAULT_BUILD_TYPE- 至少 - 除非在blockif(NOT DEFINED ...)内。
CMakeSettings.json 是 Visual Studio 的第一个配置设置,但 Visual Studio 的最新版本可以使用 CMakePresets.json 或 CMakeSettings.json,现在建议使用 CMakePresets.json(请参阅 文档)
我们建议使用 CMakePresets.json 作为 CMakeSettings.json 的替代方案。Visual Studio 永远不会同时读取 CMakePresets.json 和 CMakeSettings.json。
由于 CMakePresets.json 现在既是 Microsoft 推荐的,也是更标准/跨平台的解决方案,我认为我们可以考虑在这一点上有效地弃用 CMakeSettings.json。
| 归档时间: |
|
| 查看次数: |
6160 次 |
| 最近记录: |