CMake构建类型没有区别 我已经在C++中工作了很多年,但是我对CGuy是新手。< /P>
我使用CMake构建类型没有区别 我已经在C++中工作了很多年,但是我对CGuy是新手。< /P>,cmake,Cmake,我使用 cmake --build build_dir --config Debug --target all -- -j 1 这可以正常工作并生成调试版本 如果我将--config更改为其他任何内容,例如使用以下命令发布: cmake --build build_dir --config Release --target all -- -j 1 忍者说“没有工作要做”,然后退出。运行编译后的应用程序显然没有得到优化。在这个Cmake项目中还有两个其他选项,RelWithDebug和MinS
cmake --build build_dir --config Debug --target all -- -j 1
这可以正常工作并生成调试版本
如果我将--config更改为其他任何内容,例如使用以下命令发布:
cmake --build build_dir --config Release --target all -- -j 1
忍者说“没有工作要做”,然后退出。运行编译后的应用程序显然没有得到优化。在这个Cmake项目中还有两个其他选项,RelWithDebug和MinSizeRel,它们的作用是相同的
在CmakeLists.txt中有:
set(CMAKE_CONFIGURATION_TYPES "Release;Debug;MinSizeRel;RelWithDebInfo")
还有很多其他提到的各种类型,但在这个时候对我来说都有点希腊化
我能做些什么来找出问题所在?我将给你一个全面深入的答案。以防其他人有这种困惑 什么是a? 本质上,生成器是CMake创建的构建系统。CMake不会直接构建您的项目。因为CMake是一个。IE CMake是一个生成真实构建系统的构建系统。这就是为什么它被称为“发电机” “Visual Studio 16 2019”设计用于在一个版本中处理多个配置 这就是为什么当您打开由CMake创建的VisualStudio项目时,您可以轻松地在调试、发布等之间进行更改 其中,“Unix Makefiles”和“Ninja”一次只能处理1种配置类型 构建系统能力的这种差异导致运行CMake时CLI略有不同 Visual Studio 16 2019(多配置) 如前所述,VisualStudio在构建中支持多种配置类型
cmake -S . -B build/vs -G "Visual Studio 16 2019"
cmake --build build/vs --config Debug
cmake --build build/vs --config Release
在第一个命令中,您将创建VisualStudio2019项目
在第二个命令中,您实际上是在构建二进制文件。而且,由于VisualStudio项目是多配置的,您不需要为每种类型使用不同的生成文件夹。因为VisualStudio为您处理它
忍者(单一配置)
在上面的示例中,您为调试生成创建了一个Ninja项目。然后你建造它
然后为发布版本创建一个忍者项目。然后你建造它
请注意,您必须手动为每种类型指定2个生成文件夹
忍者多配置(CMake 3.17中新增)
得益于Ninja和CMake的进步,您可以创建新的版本,从而避免在项目创建时指定构建类型的麻烦。所以现在它就像VisualStudio一样
因此,现在您可以创建一个“忍者多配置”项目,而不仅仅是一个“忍者”项目
进一步阐述
单配置与多配置
如何判断发电机是多发电机还是单发电机
阅读文档。或者,如果您需要在脚本中添加,您可以通过编程方式进行检查
您可以查询全局属性
CMAKE_构建_类型
需要提及的一点是,CMAKE_BUILD_类型在多配置生成器上不起任何作用。因此,避免在CMake代码中使用它
查看此答案:您是否正在使用多配置忍者生成器?在这种情况下:如果在构建过程中没有指定配置,将不会产生任何效果;仅使用在cmake配置期间指定(或默认为)的配置…我正在使用VS代码(带有cmake扩展)进行配置。我从Cmake菜单中选择Release或Debug(或其他两个选项中的一个),它似乎要重新配置。但是当我构建它时——无论是从VS代码还是从命令行——它说没有工作要做。。。我会在build文件夹中查找什么来查看优化/调试令牌的设置位置?我不使用VS代码。也许试着打开一个vs代码特定的问题。@Omroth我回答你的问题回答得够好了吗?我知道您对cmake扩展有问题,但请将其作为一个单独的问题。尝试手动编写我建议的cmakecli。然后找出扩展正在做什么。如果我不得不猜测扩展只创建了1个构建文件夹,这是不够的。“我会在构建文件夹中查找什么来查看优化/调试令牌将设置在哪里?”-您可以查看生成的Ninja文件并查看正在创建的CLI。
cmake -S . -B build/ninja/dbg -G "Ninja" -D CMAKE_BUILD_TYPE=Debug
cmake --build build/ninja/dbg
cmake -S . -B build/ninja/rel -G "Ninja" -D CMAKE_BUILD_TYPE=Release
cmake --build build/ninja/rel
cmake -S . -B build/nin -G "Ninja Multi-Config"
cmake --build build/nin --config Debug
cmake --build build/nin --config Release