【发布时间】:2015-12-19 13:20:52
【问题描述】:
我有一个使用 CMake 的项目,但由于编译器错误(模板解析、优化和异常处理之间的交互)而无法在 VS 2015 上编译 this code。
可以通过禁用优化来避免该错误 - 虽然这会产生次优代码,但至少项目可以编译。
如何在 Release 和 RelWithDebInfo 构建中将 MSVC 2015 的默认优化级别更改为 /O0?
我的幼稚实现将是CMAKE_CXX_FLAGS 中的条件替换——未来安全吗?
另一种方法是在有问题的标头中使用#pragma。
【问题讨论】:
-
顺便说一句,我敢说,如果您的代码使用模板的程度会破坏编译器,那么您不希望对其进行非优化。即使是项目编译器,生成的代码也很有可能会在性能上造成大约 2-3 倍的损失。
-
@SergeyA,有问题的模板代码相当简单——添加了一个指向 pastebin 的链接。
-
我能够提出问题,尝试解决方案,并提供我自己会选择的答案。我正在使用 VS2015,其中 Windows C++11 工作/实验是有序的,所以这个问题让我很感兴趣。
-
未来最安全的方法——如果不清楚哪个编译器版本存在或将存在错误——在我看来是使用 CMake 模块
CheckCXXSourceCompiles。然后您可以检查结果并相应地调整优化级别。 -
@Florian,问题在于源代码确实可以编译。它是崩溃的链接器(我只是因为我在 VS2015 中尝试过这个才发现的)。当然,OP 的帖子并没有说清楚。
标签: c++ visual-c++ cmake