[英]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++11
和QMAKE_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.