qmake 同时启用 clang++ 和 g++
qmake is enabling both clang++ and g++ at the same time
无论我的 .pro 文件内容如何,clang++ 和 g++ 都在继续使用:
linux-clang++
{
message("Using clang++")
QMAKE_CXXFLAGS += -Weverything
}
linux-g++
{
message("Using g++")
QMAKE_CXXFLAGS += -Wall -Wextra
}
我也尝试根据 qmake 文档检查 QMAKE_CXX
到 contains(QMAKE_CXX, clang++)
和 equals(QMAKE_CXX = clang++)
,但无论如何我得到相同的输出:
Project MESSAGE: Using clang++
Project MESSAGE: Using g++
message($$QMAKESPEC)
输出 Project MESSAGE: /usr/lib/qt/mkspecs/linux-g++
,构建设置也显示 -spec linux-g++
,但它似乎一直启用 clang。
反之亦然:将我在 QtCreator 中的默认编译器更改为 clang,并设置 QMAKE_CXX = clang++
导致 g++ 仍在使用。
只能假设我错过了什么地方吗?
我刚刚弄明白了。大括号必须与语句保持在同一行,否则 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++
无论我的 .pro 文件内容如何,clang++ 和 g++ 都在继续使用:
linux-clang++
{
message("Using clang++")
QMAKE_CXXFLAGS += -Weverything
}
linux-g++
{
message("Using g++")
QMAKE_CXXFLAGS += -Wall -Wextra
}
我也尝试根据 qmake 文档检查 QMAKE_CXX
到 contains(QMAKE_CXX, clang++)
和 equals(QMAKE_CXX = clang++)
,但无论如何我得到相同的输出:
Project MESSAGE: Using clang++
Project MESSAGE: Using g++
message($$QMAKESPEC)
输出 Project MESSAGE: /usr/lib/qt/mkspecs/linux-g++
,构建设置也显示 -spec linux-g++
,但它似乎一直启用 clang。
反之亦然:将我在 QtCreator 中的默认编译器更改为 clang,并设置 QMAKE_CXX = clang++
导致 g++ 仍在使用。
只能假设我错过了什么地方吗?
我刚刚弄明白了。大括号必须与语句保持在同一行,否则 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++