문제

하는 방법은 없을 얻을 버 및 공급업체의 컴파일러 사용으로 사용자를 통해 qmake?내가 무슨 필요가 사용하지 않는 건물 일부 대상의 프로젝트 때 g++3.x 을 사용할 때 g++4.x 이 사용됩니다.

업데이트: 대부분의 답변을 대상으로 전처리기.이것은 무언가가는 내용하고 싶지 않을 수도 있습니다.나는 원하지 않는 표적을 구축을 위해 특정 컴파일러 버전이며 이 결정에 의해 만들 수 있를 저장할 수 있다는 것입니다.

도움이 되었습니까?

해결책

에 추가 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" )
    }
}

그런 다음 나중에 대상을 지정하는 데 사용하려면 구성 범위 규칙을 사용할 수 있습니다.

SOURCES += blah blah2 blah3
g++4: SOURCES += blah4 blah5

다른 팁

내 대답을 기반으로합니다 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" )
            }
        }
    }
}

보시다시피 GCC에서 버전을 얻은 다음 Regex 표현식과 비교할 수 있습니다.

사용 방법은 동일합니다.

SOURCES += blah blah2 blah3
g++4: SOURCES += blah4 blah5

처음에는 Qmake가 지원하는 범위 기능을 살펴 보겠습니다.

범위와 조건

그러나 내가 그것에 대해 읽는 동안, 기본적으로 당신은 다음과 같은 일반 플랫폼 조건을 사용할 수있는 것 같습니다. win32 또는 unix 또는 Qmake 사양의 이름을 사용할 수 있습니다. linux-g++. 이와 같은 Visual Studio 버전을 테스트 할 수는 있지만 (다른 Visual Studio 버전은 다른 QMake 사양을 사용하므로) GCC 버전을 이와 같은 테스트 할 수 있다고 생각하지 않습니다 (적어도 어떻게 알지 못합니다).

그래요

isEmpty(MGWVER) {
    MGW_MAJ = $$system(echo | gcc -dM -E - | fgrep __GNUC__ | cut -d\" \" -f 3)
    MGW_MIN = $$system(echo | gcc -dM -E - | fgrep __GNUC_MINOR__ | cut -d\" \" -f 3)
    MGWVER =$$MGW_MAJ$$MGW_MIN
    message(MGWVER $$MGWVER)
}

"48"을 반환합니다. 적절한 부스트 라이브러리를 연결하는 데 사용합니다.

USER_BOOST_CFG=mgw$${MGWVER}-mt-s-$$(BOOST_VER)
message($$USER_BOOST_CFG)
LIBS *= -L$$(BOOST_ROOT)/lib
LIBS *= -L$$(BOOST_ROOT)/stage/lib

LIBS *= -lboost_system-$$USER_BOOST_CFG
LIBS *= -lboost_filesystem-$$USER_BOOST_CFG
LIBS *= -lboost_date_time-$$USER_BOOST_CFG

효과적으로주는 : -lboost_system-mgw48-mt-s-1_54

나는 mingw에있다.

또 다른 아이디어는 Qmakespec vaariable을보고 그것으로부터 구문 분석하는 것입니다.

message(QMAKESPEC $$QMAKESPEC)
SPLITED=$$section(QMAKESPEC, "/", 0, -3)
message(SPLITED $$SPLITED)

내 대답은 기반입니다 해고의 대답
우리는 단순히 $$ str_member를 사용하여 주요 버전 번호를 추출 할 수 있습니다.

gcc | clang {
    COMPILER_VERSION = $$system($$QMAKE_CXX " -dumpversion")
    COMPILER_MAJOR_VERSION = $$str_member($$COMPILER_VERSION)
    greaterThan(COMPILER_MAJOR_VERSION, 3): message("gcc 4 or later")
    greaterThan(COMPILER_MAJOR_VERSION, 4): message("gcc 5 or later")
    greaterThan(COMPILER_MAJOR_VERSION, 5): message("gcc 6 or later")
    greaterThan(COMPILER_MAJOR_VERSION, 6): message("gcc 7 or later")
}

각 컴파일러 공급업체를 정의하는 데 사용하는 일부 특정 심볼을 식별하는 컴파일러 및 버전입니다.을 만들 수 있는 검사를 사용하여 그 기호입니다.

내가 알고,예를 들어,는 _MSC_VER 제공 버전의 Microsoft C++컴파일러입니다.

무엇을 알고 있는 향상 라이브러리를 사용하의이 종류는 기능 선택과 적응.

당신이 볼 수 있을 향상 Config 헤더에서 발견된 폴더 포함 경로:후원/config/*,에서 특별히 select_compiler_config.hpp.

를 사용하여 그 특정 컴파일러 기호를 만들 수 있는 기능 선택 사전 처리 단계의 건물의 코드입니다.

다음 매크로는 내 버전의 GCC 및 G ++에 정의되어 있습니다.

#define __GNUC__ 4 
#define __GNUC_MINOR__ 0
#define __GNUC_PATCHLEVEL__ 1

G ++는 다음과 같습니다.

#define __GNUG__ 4
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top