【问题标题】:C++ Qt - How to add "-std=c++11" to the makefile which is generated by qmake?C++ Qt - 如何在 qmake 生成的 makefile 中添加“-std=c++11”?
【发布时间】:2013-10-24 06:34:02
【问题描述】:

我正在用 Qt 开发一个程序。它的 makefile 是从 .pro 文件自动生成的。我需要使用一些需要为 g++ 设置 -std=c++11 标志的代码。我应该在 .pro 的哪个位置添加此标志? (仅更改 Makefile 将不起作用,因为每次构建项目时它都会被新生成的文件覆盖)。

【问题讨论】:

标签: qt c++11 makefile qmake


【解决方案1】:

您可以在 Qt .pro for C++11 中添加以下内容:-

CONFIG += c++11

从 Qt 5.4 开始,可以使用 C++14 启用

CONFIG += c++14

【讨论】:

  • 我添加了这个,运行 qmake 并重建了项目,但我仍然遇到同样的错误(它与向量初始化有关),而且我在 g++ 中看不到 c++11。 ../SignalAnalyzer/TestConfiguration.cpp:12:61: 错误:在 C++98 中,'TestConfiguration::measurementPoints' 必须由构造函数初始化,而不是由 '{...}'
  • 您可以将完整的错误添加到问题中吗?你只问在哪里添加配置命令,并没有说明错误。
  • 如果我的项目没有 .pro 文件怎么办(仅使用 qtcreator 作为编辑器时)。然后我要修改哪个 qt 生成的文件(修改 .config 似乎没有什么区别)。
  • 使用 CONFIG += c++11 似乎仅受 qmake 3.0 版及更高版本(Qt5 随附的版本)支持。早期版本的 qmake 似乎忽略了这个值,因此您可能必须在 Qt4 和更早版本中使用 QMAKE_CXXFLAGS += -std=c++11。
  • 我想我可以证实@josmith42 的理论。如果我有一个带有指向 Qt4.x 的工具包的项目,那么我不能使用unique_ptr,除非我滥用QMAKE_CXXFLAGS。我将其更改为 Qt5,然后 unique_ptr 突然起作用,如果我只有 CONFIG += c++11
【解决方案2】:

您可以更改 CXX 标志:

QMAKE_CXXFLAGS += -std=c++11

我通常设置为:

QMAKE_CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic

【讨论】:

  • 绝对不要用这个。
  • @becko "Definitely" 有点强,但指定这样的开关是不可移植的。它适用于 gcc,可能适用于 clang,但不适用于 MSVC
  • 为我工作! Centos,Qt4
【解决方案3】:

您可能会发现插入特定标志(您提到的)很诱人

QMAKE_CXXFLAGS += -std=c++11

在您的 .pro 文件中,但这只会代表您插入该标志。

这还不够。正确的做法是改为插入

CONFIG += c++11

在您的 .pro 文件中。然后qmake 会进行两到三个必要的更改:

  1. -std=c++11 已插入。
  2. -stdlib=libc++ 已插入。
  3. 如果您使用的是 Mac,-mmacosx-version-min=10.6 将变为 -mmacosx-version-min=10.7。 (在其他操作系统或操作系统版本上,可能需要进行一些类似的更改。)

12 的类似问题。)

【讨论】:

  • @Wildling 所以你使用了 CONFIG += c++11 却遇到了 c++11 编译问题?
  • 感谢您解释为什么QMAKE_CXXFLAGS 不够用。 +1
  • 调整配置不适用于 Qt4。尚未针对 Qt5 进行测试。
【解决方案4】:

我使用的是 Snow Leopad 10.6.8 和 gcc 4.9,我必须使用

CONFIG += c++11

而不是

QMAKE_CXXFLAGS += -std=c++11

后者根本无法识别。

【讨论】:

    【解决方案5】:
    CONFIG += c++11 
    

    在我的 Ubuntu 桌面上安装 qt5-default 后,在 .pro 文件中似乎可以使用 Qt4 SDK:

    sudo apt install qt5-default
    

    无论如何,生成的 makefile 包含一个 -std=c++0x 选项,我怀疑它足以编译我的 C++11 代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      相关资源
      最近更新 更多