每个项目needs拥有配置 CMake 项目的 CMakeLists.txt 文件。您可以通过以下步骤了解更多信息官方 CMake 教程. 这是 CLion 提供的有关 CMakeLists.txt 文件的教程.
CmakePresets.json是一个可选的 CMake 功能。这不是微软特有的事情。它是一个允许为通常一起使用的配置、构建、测试和打包设置编写预设的工具。这就是它的用处。前任。填写option()变量(即defined在项目的 CMakeLists.txt 文件中),或其他缓存和环境变量。预设基本上是一种工具,无需为常见用户场景编写许多常用的命令行参数,而是为它们提供快捷方式/别名。
CMakeSettings.json特定于 Visual Studio。您可以在专门使用 Visual Studio 构建项目时使用它。它具有与 CMakePresets.json 文件类似的功能,但更适合使用 Visual Studio IDE 配置。官方文档建议不再使用它,而改用 CMakePresets.json。
以下是关于预设是什么以及何时有用的类比:想象一个项目就像一家三明治店,您可以在其中选择三明治中想要的成分(在配置项目构建时要选择哪些选项)。假设一家三明治店有培根、生菜、番茄和黄瓜(以及许多其他成分),这些都是您喜欢在三明治中添加的成分。所有可能可供选择的成分的列表是 CMakeLists.txt 文件。店家注意到很多人喜欢点培根、生菜和番茄一起做的三明治,所以他们预设了一个:“B.L.T.”。所以现在,您可以更快地告诉他们您想要什么:您可以说:“我想要一份加黄瓜的 B.L.T.,而不是培根、生菜、西红柿和黄瓜”(例如: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 ...), option(), if(DEFINED ...))在 CMakeLists.txt 中使用可覆盖的默认值定义设置,并在配置时将选择权留给用户,如果有用,请提供一些预设位来帮助他们/您自己。
更多示例:以下是我通常不会在 CMakeLists.txt 文件中硬编码的一些内容,但我会放入某些预设:CMAKE_CONFIGURATION_TYPES, CMAKE_EXPORT_COMPILE_COMMANDS, CMAKE_COLOR_DIAGNOSTICS, CMAKE_DEFAULT_BUILD_TYPE- 至少 - 不包括在内a if(DEFINED ...) block.