【发布时间】:2015-05-15 21:57:27
【问题描述】:
我正在使用 QT Creator 在 Ubuntu 上制作 C++ 程序。我编写的程序编译得很好,直到我决定开始使用 C++11 而不是 C++98(这是 QT Creator 中的默认设置)。我使用的是我自己的 cmake 文件,而不是 qmake,所以为了做到这一点,我在 CMakeLists.txt file 中包含了以下行:
set(CMAKE_CXX_FLAGS "-std=c++0x")
现在,我的部分代码如下(不是我写的):
#if (linux && (i386 || __x86_64__))
# include "Linux-x86/OniPlatformLinux-x86.h"
#elif (linux && __arm__)
# include "Linux-Arm/OniPlatformLinux-Arm.h"
#else
# error Unsupported Platform!
#endif
转换到 C++11 后,我在 error Unsupported Platform! 行收到错误消息。这是因为,据我所知,变量 linux 没有在任何地方定义,尽管变量 __x86_64__ 已定义。
因此,我有两个问题:
1) 为什么变量linux 没有定义,即使我使用的是Linux?
2) 如何让 C++11 忽略此错误?
谢谢。
【问题讨论】:
-
你试过只使用
linux而不添加__arm__吗? -
那行不通,因为
linux无论如何都没有在任何地方定义。我也尝试用unix替换linux,但这仍然没有定义。 -
是
set(CMAKE_CXX_FLAGS "-std=c++0x")您所做的唯一更改吗?除非您依赖非标准行为,否则大多数 C++98 代码应该在 C++11 中编译良好。 -
这不是 only 的变化,因为我已经合并了来自其他地方的一些代码,这些代码使用了一些 C++11 代码(例如用于右值引用的双 & 符号),其中这就是我需要升级的原因。但是,这是对我的
CMakeLists.txt文件的唯一更改。 -
您是否尝试过还原所有更改,除了更改 makefile 中的代码,然后让它编译?