Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake构建类型没有区别 我已经在C++中工作了很多年,但是我对CGuy是新手。< /P>_Cmake - Fatal编程技术网

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