在使用Clang的QtCreator中支持C++14

5
我应该如何使用Clang 3.5在QtCreator 3.3中启用C++14支持?我已经添加了Clang kit,并且在项目文件中添加了CONFIG += c++14。但是,当使用例如返回类型推断时,我会遇到以下错误:

error: 'auto' return without trailing return type; deduced return types are a C++1y extension


http://stackoverflow.com/q/27857253/862973 - ldgorman
你复制了自己的问题吗? - ldgorman
1
请查看此链接:https://dev59.com/Pm855IYBdhLWcg3wHwiH#9878792 - ldgorman
1
@JoachimPileborg: 他们的状态页面上说:"您可以使用带有 -std=c++14 选项的 Clang 进入 C++14 模式(在 Clang 3.4 及更早版本中使用 -std=c++1y)",我理解为"-std=c++14 在 3.5 及以上版本中与 -std=c++1y 具有相同的效果"。 - Michael
3
我的另一个问题是关于GCC的错误。现在我想知道如何启用Clang,以便绕过GCC中的错误。 - gartenriese
显示剩余2条评论
2个回答

6
您可以在Qt5.5中的.pro文件中使用CONFIG += c++14,但是由于clang存在一个bug,因此我们需要修改Qt/5.5/clang_64/mkspecs/features/c++14.prf文件,在include(c++11.prf)之前添加以下代码:
contains(QMAKE_LFLAGS_CXX11, -stdlib=libc++) {
    QMAKE_CXXFLAGS_CXX11 += -stdlib=libc++
}

我的 c++14.prf 文件设置了保护,以防止在 Clang 版本早于 3.2 或 Apple 版本早于 4 的情况下指定 -std=c++1y。我注释掉了这些保护 - 希望一切都能正常工作! - Jack Deeth

4
我不得不前往构建文件夹中的Makefile,并手动将-std=c++11替换为-std=c++14。幸运的是,只要在项目中添加工具包时编写一次Makefile即可。我只需要执行这个步骤一次,就可以随意在QtCreator中进行构建。
所以现在我可以使用Clang工具包来使用所有新的c++14特性。作为奖励,如果我在Makefile中手动设置-std=c++1z,我还可以使用所有的c++17特性。棒极了!

2
你可以在.pro文件中执行QMAKE_CXXFLAGS += -std=c++1z - Ivan Aksamentov - Drop
@Drop:我之前尝试过。它不起作用,因为它会在Makefile中添加“-std=c++1z”和“-std=c++11”。 - gartenriese
你忘记移除 CONFIG += c++14 了吗? - nib
@nib:我认为当我将其删除时,它添加了-std=c++03。 - gartenriese
1
我已经测试过了,QMAKE_CXXFLAGS += -std=c++1y 可以正常用于返回类型推导。在Qt5.5中,还可以使用 CONFIG += c++14。对于早期版本的Qt,您甚至可以创建自己的 mkspecs/features/c++14.prf - nib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接