簡體   English   中英

CONFIG + = c ++ 11(仍然)在Linux上不起作用

[英]CONFIG += c++11 (still) doesn't work on Linux

我已經閱讀了有關該主題的一些討論,有人說qmake <3.0不正確支持該指令。 我剛剛為g ++-64重新安裝了Qt 5.9.1,但問題仍然存在。 另外,我嘗試過各種運氣不佳的mkspecs / xxx / xxx.conf文件。

在.pro中添加CONFIG += c++11並不會在Makefile中真正添加CXX標志-std = c ++ 11,因此會出現錯誤

error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.

編譯時。

我正在使用最新版本的Qt庫(5.9.1)開發Linux x64(一個Ubuntu發行版)。 使用MSVC2015和MinGw在Windows上編譯相同項目時沒有錯誤。

如果我聲明QMAKE_CXXFLAGS += -std=c++11而不是CONFIG += c++11 ,它將起作用,但是建議使用前一個聲明,因為qmake將通過CONFIG指令自動處理CXX標志。 糟糕的是,看起來好像沒有這樣做...

CONFIG += c++11應該足夠了,以便使用適當的標志調用編譯器以啟用C ++ 11支持。

但是,從5.7開始,Qt需要C ++ 11支持,因此即使沒有CONFIG += c++11您也應該使用C ++ 11支持來調用編譯器。

我認為對於您的編譯器,qmake會“考慮” c ++ 11支持是默認行為,而qmake不會添加-std=c++11標志。

如果您感到好奇,可以檢查mkspecs文件。 正如@Swift提到的那樣,您必須檢查您的內容,因為它們可能已得到糾正。 在我的Qt安裝中,似乎一切正常,如mkspecs/common/g++-base.conf我有QMAKE_CXXFLAGS_CXX11 = -std=c++11QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11

如果我是對的,那意味着您可以嘗試使用CONFIG += c++14 (或CONFIG += c++1z )來繞過qmake行為。 您也可以嘗試使用CONFIG += strict_c++ (或CONFIG -= strict_c++ ),此選項將禁用(或啟用)GNU擴展,從而強制qmake添加-std=c++11 (這樣g ++將不會使用隱式-std=gnu++11 )。

CONFIG變量用於配置Qt代碼(標頭,可能是元代碼),因此應在其中添加c ++ 11以支持c ++ 11。 編譯器標志是一個單獨的項目,視編譯器及其版本而定,它可能是必需的,也可能不是必需的。較新的gcc默認為標准的gnu版本(帶有擴展名),例如gcc 6.0-gnu ++ 14。

我想到了。 這是我的錯(很明顯...)

如前所述,我已經通過統一的安裝程序腳本安裝了最新版本的Qt(5.9.1)。 不過,我的QtCreator默認使用的是舊版的帶有Qt4(!!)的工具包,該工具包是通過安裝了who-remembers-when的軟件包管理器安裝的,因此它實際上使用的是不兼容CONFIG指令的舊版qmake。 強制qtchooser使用qt5不會修改二手套件中設置的工具(了解一些知識!)。 使用最后一個工具包,一切正常。 在將qtchooser設置為使用qt5之后,通過命令行使用qmake,也可以按預期工作; 我只是沒有在尋找正確的Makefile(....)。

因此,我可以確認問題出在其他線程中所說的qmake版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM