2015-10-04 41 views
0

,既鐺++和g ++繼續使用:qmake時同時啓用兩個鐺++和g ++不管我.pro文件內容

linux-clang++ 
{ 
    message("Using clang++") 
    QMAKE_CXXFLAGS += -Weverything 
} 
linux-g++ 
{ 
    message("Using g++") 
    QMAKE_CXXFLAGS += -Wall -Wextra 
} 

我也試圖通過contains(QMAKE_CXX, clang++)equals(QMAKE_CXX = clang++)檢查QMAKE_CXX,如每QMAKE文檔,但我得到了相同的輸出,而不管:

Project MESSAGE: Using clang++ 
Project MESSAGE: Using g++ 

message($$QMAKESPEC)輸出Project MESSAGE: /usr/lib/qt/mkspecs/linux-g++,並構建設置,也可以說-spec linux-g++,但它似乎保持其鐺EN體健。

反過來也是如此:將我在QtCreator中的默認編譯器更改爲clang,並設置QMAKE_CXX = clang++導致g ++仍然在使用。

只能假設我錯過了什麼地方?

+0

多少Makefile文件QMAKE爲您生成?他們裏面有什麼? – Drop

+0

根據需要只生成1個makefile,並且它都是正常的(-spec linux-g ++等)。這可以在建築之前檢測到;編輯.pro文件並保存,qtcreator自動分析並輸出這兩個消息。即使添加equals(QMAKE_CXX,「blah」)',它仍然會進入其範圍。 – ZXcvbnM

回答

1

我剛剛弄明白了。花括號必須與陳述保持在同一行,否則qmake將其解釋爲始終爲真的空白陳述。

例如,我測試:

linux-clang++ 
{ 
    message("linux-clang++:Using clang++") 
} 
linux-g++ 
{ 
    message("linux-g++:Using g++") 
} 
equals(QMAKE_CXX, g++) 
{ 
    message("equals:Using g++") 
} 
equals(QMAKE_CXX, clang++) 
{ 
    message("equals:Using clang++") 
} 
equals(QMAKE_CXX, "blah") 
{ 
    message("equals:Using blah") 
} 

和輸出:

Project MESSAGE: linux-clang++:Using clang++ 
Project MESSAGE: linux-g++:Using g++ 
Project MESSAGE: equals:Using g++ 
Project MESSAGE: equals:Using clang++ 
Project MESSAGE: equals:Using blah 

通過以上的調整,它工作正常:

linux-clang++ { 
    message("linux-clang++:Using clang++") 
} 
linux-g++ { 
    message("linux-g++:Using g++") 
} 
equals(QMAKE_CXX, g++) { 
    message("equals:Using g++") 
} 
equals(QMAKE_CXX, clang++) { 
    message("equals:Using clang++") 
} 
equals(QMAKE_CXX, "blah") { 
    message("equals:Using blah") 
} 

Project MESSAGE: linux-g++:Using g++ 
Project MESSAGE: equals:Using g++ 
+0

使用'{'...'}'的表單被設計用於多行條件內容 - 對於_single_行我相信冒號':'條件足夠單行_(在同一行上)_的行動。然而,如果條件是**不是** true,並且佈置else操作,則可以跟隨/更改關閉'}'形式到'} else {'(全部在同一行)來完成某件事情。以同樣的方式(關閉'}') - 我不確定在一個「if/else」結構中是否可以爲一個單行表單,而是另一個多行表單單元格,但是... – SlySven

相關問題