使用qmake查找编译器供应商/版本

Yor*_*les 9 c++ qt build-process qmake makefile

有没有办法通过qmake获取用户使用的编译器的版本和供应商?我需要的是在使用g ++ 3.x时禁用构建项目的某些目标,并在使用g ++ 4.x时启用它们.

更新:大多数答案都针对预处理器.这是我想要避免的.我不希望为特定的编译器版本构建目标,并且我希望由构建系统做出此决定.

Cal*_*itt 14

除了ashcatch的答案之外,还qmake允许您查询命令行并将响应作为变量返回.所以你可以这样:

linux-g++ {
    system( g++ --version | grep -e "\<4.[0-9]" ) {
        message( "g++ version 4.x found" )
        CONFIG += g++4
    }
    else system( g++ --version | grep -e "\<3.[0-9]" ) {
        message( "g++ version 3.x found" )
        CONFIG += g++3
    }
    else {
        error( "Unknown system/compiler configuration" )
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,当您想使用它来指定目标时,您可以使用配置范围规则:

SOURCES += blah blah2 blah3
g++4: SOURCES += blah4 blah5
Run Code Online (Sandbox Code Playgroud)


dis*_*ine 5

我的答案基于Caleb Huitt-cjhuitt的。但是他的方法对我不起作用。

*-g++ {
    GCC_VERSION = $$system("g++ -dumpversion")
    contains(GCC_VERSION, 6.[0-9]) {
        message( "g++ version 6.x found" )
        CONFIG += g++6
    } else {
        contains(GCC_VERSION, 5.[0-9]) {
            message( "g++ version 5.x found" )
            CONFIG += g++5
        } else {
            contains(GCC_VERSION, 4.[0-9]) {
                message( "g++ version 4.x found" )
                CONFIG += g++4
            } else {
                message( "Unknown GCC configuration" )
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,您可以从GCC获取版本,然后将其与regex表达式进行比较。

使用方法相同:

SOURCES += blah blah2 blah3
g++4: SOURCES += blah4 blah5
Run Code Online (Sandbox Code Playgroud)