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_CXXcontains(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++