2008-12-10 11 views
20

Czy w plikach projektu Qmake znajduje się identyfikator "win64"? Qt Qmake advanced dokumentacja nie wspomina innych niż unix/macx/win32.Identyfikator konfiguracji win64 w Qmake

Dotychczas Próbowałem przy użyciu:

win32:message("using win32") 
win64:message("using win64") 
amd64:message("using amd64") 

Wynik jest zawsze "przy użyciu systemu Win32".

Czy muszę używać oddzielnego pliku projektu dla projektów x32 i x64, aby kompilowały się z odpowiednimi bibliotekami? Czy istnieje inny sposób identyfikacji między środowiskami 32-bitowymi a 64-bitowymi?

Odpowiedz

23

to zrobić jak ten

win32 { 

    ## Windows common build here 

    !contains(QMAKE_TARGET.arch, x86_64) { 
     message("x86 build") 

     ## Windows x86 (32bit) specific build here 

    } else { 
     message("x86_64 build") 

     ## Windows x64 (64bit) specific build here 

    } 
} 
0

Nie, ale można utworzyć i używać nowego mkspec, myślę, że qmake definiuje również identyfikator platformy nazwany po bieżącym mkspec. Dlaczego musisz testować na 64-bitowe?

Reed

+0

Chcę używać Win32 API w Qt i muszę połączyć z bibliotekami z Windows SDK. Oczywiście te biblioteki znajdują się w różnych katalogach i dlatego muszę dołączać różne pliki za pomocą LIBS. Może robię to wszystko źle? Czy istnieje lepszy sposób na zrobienie tego? – Tuminoid

+0

W szczególności w Qt Open Source Edition, nie komercyjne Qt z integracją VS, ale z linii poleceń i plików projektów qmake. – Tuminoid

2

Wymyśliłem jeden sposób, aby to zrobić.

Qt umożliwia przekazywanie dowolnych parametrów konfiguracyjnych, które można wykorzystać do oddzielenia celów.

Poprzez warunkową config w pliku projektu:

CONFIG(myX64, myX64|myX32) { 
    LIBPATH += C:\Coding\MSSDK60A\Lib\x64 
} else { 
    LIBPATH += C:\Coding\MSSDK60A\Lib 
} 

i przechodzącej że niestandardowe config qmake z

qmake CONFIG+=myX64 

uzyskać żądaną rezultatu.

+0

Oczywiście można używać różnych plików .pro, które zawierają części wspólne, ale osobiście uważam, że ból w ... – Tuminoid

9

UPDATE: od niedawna Qt ma sposób robi to w sposób przejrzysty i łatwo, bez konieczności ręcznego kłopotów:

win32-g++:contains(QMAKE_HOST.arch, x86_64):{ 
    do something 
} 

Źródło: the brand new Qt Dev FAQ

+0

Wow, szukam tego od wielu dni. Dzięki za odpowiedź. –

+0

Czy nie powinien to być QMAKE_TARGET zamiast QMAKE_HOST? – Simon

+0

@Simon ['QMAKE_TARGET'] (http://qt-project.org/doc/qt-5/qmake-variable-reference.html#qmake-target) zawiera nazwę celu projektu (np. Plik binarny) . 'qmake' nigdy nie było zaprojektowane do obsługi kompilacji krzyżowej gdzie cel! = host. – rubenvb

13

Od Qt5 można użyć QT_ARCH do wykrycia, czy twoja konfiguracja ma wartość 32, czy 64. Gdy cel jest 32-bitowy, to zwraca i386 i w przypadku 64-bitowego celu ma wartość x86_64. Więc może być używany jak:

contains(QT_ARCH, i386) { 
    message("32-bit") 
} else { 
    message("64-bit") 
} 
Powiązane problemy