首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >简单的C++程序使用Debug在CMake中构建ok,但在发布时失败。

简单的C++程序使用Debug在CMake中构建ok,但在发布时失败。
EN

Stack Overflow用户
提问于 2018-10-24 15:30:36
回答 2查看 1.3K关注 0票数 0

我有一个简单的C++程序:

代码语言:javascript
运行
复制
#include <iostream>
int main(int argc, char *argv[])
{
   std::cout << "Hello Build Type!" << std::endl;
   std::cin.get();
   return 0;
}

我可以使用CMake命令:cmake --build .构建它,没有任何问题。

CmakeLists.txt是这样的:

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CONFIGURATION_TYPES DEBUG)

project (build_type CXX)
add_executable(cmake_examples_build_type main.cpp)

但是,当我将CMAKE_CONFIGURATION_TYPES更改为RELEASE时,使用cmake --build .构建时会出现此错误。

建造工作启动2018年10月24日上午10:35:38 项目"C:\Users\ialkeilani\OneDrive -节点1上的Ushrauto\temp\cmake-examples-master\01-basic\F-build-type\build\ALL_BUILD.vcxproj“(默认目标)。 项目"C:\Users\ialkeilani\OneDrive - Ushrauto\temp\cmake-examples-master\01-basic\F-build-type\build\ALL_BUILD.vcxproj“(1)正在建设中 "C:\Users\ialkeilani\OneDrive -节点1(默认目标)上的Ushrauto\temp\cmake-examples-master\01-basic\F-build-type\build\ZERO_CHECK.vcxproj“(2)。 C:\Program (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(61,5):error MSB8013:该项目不包含Debug 32的配置和平台组合。C:\用户\ialkeilani\OneDrive- Ushrauto\temp\cmake-examples-master\01-basic\F-build-type\build\ZERO_CHECK.vcxproj完成了构建项目"C:\Users\ialkeilani\OneDrive - Ushrauto\temp\cmake-examples-master\01-basic\F-build-type\build\ZERO_CHECK.vcxproj“(默认目标) --失败。 完成构建项目"C:\Users\ialkeilani\OneDrive - Ushrauto\temp\cmake-examples-master\01-basic\F-build-type\build\ALL_BUILD.vcxproj“(默认目标)-失败。 构建失败。 "C:\Users\ialkeilani\OneDrive - Ushrauto\temp\cmake-examples-master\01-basic\F-build-type\build\ALL_BUILD.vcxproj“(默认目标) (1) -> "C:\Users\ialkeilani\OneDrive - Ushrauto\temp\cmake-examples-master\01-basic\F-build-type\build\ZERO_CHECK.vcxproj”(默认目标) (2) -> (PlatformPrepareForBuild目标) -> C:\Program (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(61,5):error MSB8013:该项目不包含Debug 32的配置和Platfor组合。用户\ialkeilani\OneDrive- Ushrauto\temp\cmake-examples-master\01-basic\F-build-type\build\ZERO_CHECK.vcxproj 0警告 1错误 过了00:00:00.18

此外,当我尝试使用下面的命令使用MSVC构建时:msbuild build_type.sln /p:configuration=release

构建完成没有任何问题。

有谁能告诉我为什么CMake没有问题,但却无法构建发行版配置?

运行2013和CMake 3.5.2

EN

回答 2

Stack Overflow用户

发布于 2019-01-05 12:27:29

Visual是一个“多配置”生成器,因此:

设置CMAKE_BUILD_TYPE没有任何效果。您可以通过打开生成的解决方案来验证这一点:所有配置仍然可用。

设置CMAKE_CONFIGURATION_TYPES=Release是正确的方法:在IDE中打开生成的解决方案只允许您选择"Release“。在中构建示例将运行得很好。

但是,在运行CMake时,在运行cmake --build .时,似乎存在一个与相结合的错误,将命令更改为cmake --build . --config Release将有效。这在CMake中似乎是一种回归,因为这曾经在某个时候起作用。在最近升级了构建环境之后,我自己也遇到了这个特定的问题。

顺便说一句,这似乎真的只发生在Visual中。我没有看到XCode存在这个问题,它也是一个“多配置”生成器。

票数 1
EN

Stack Overflow用户

发布于 2018-10-24 16:52:21

您应该使用下面的选项而不是CMAKE_CONFIGURATION_TYPES:

代码语言:javascript
运行
复制
CMAKE_BUILD_TYPE

这可以通过cmake设置:

代码语言:javascript
运行
复制
cmake -DCMAKE_BUILD_TYPE=Debug <cmake-source-tree>

或使用ccmake:

代码语言:javascript
运行
复制
ccmake <cmake-source-tree>

请注意,您需要先配置(如上面所示),然后执行构建步骤。这就是:

代码语言:javascript
运行
复制
cmake -DCMAKE_BUILD_TYPE=<Release|Debug> <cmake-source-tree>
make

。如果您在项目路径中进行构建,但考虑使用CMake建议的无源构建。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52972823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档