2013-08-22 9 views
6

Vorrei creare un file di progetto che funzionasse sia con msvc che con gcc.qmake: opzioni di gestione per gcc e msvc

Per le istanze, per ottimizzare la velocità si farebbe cl /O2 e g++ -O3.

Ma non so come dire al file di progetto per fare la differenza. Vorrei qualcosa di simile:

msvc:QMAKE_CXXFLAGS_RELEASE += /O2 /openmp /arch:AVX 
else:QMAKE_CXXFLAGS_RELEASE += -O3 -march=native -fopenmp -D_GLIBCXX_PARALLEL 

che non funziona purtroppo.

Un altro modo sarebbe quello di modificare gli mkspec e raggruppare quelli nuovi con la mia app, ma non è molto portabile. Grazie!

+0

Qual è il problema? Cosa intendi dicendo "non funziona tristemente"? – Bill

+0

Hai provato a utilizzare un ambito come 'win32' e'! Win32' come descritto nei documenti? http://qt-project.org/doc/qt-4.8/qmake-advanced-usage.html –

+0

Se aggiungo il codice che ho inserito prima nel mio file di progetto, avrò ancora: 'cl -O3 -march = nativo -fopenmp -D_GLIBCXX_PARALLEL' mentre voglio 'cl/O2/openmp/arch: AVX' –

risposta

8

Jean, per essere precisi, è necessario utilizzare questo in base alla descrizione:

msvc:QMAKE_CXXFLAGS_RELEASE += /O2 /openmp /arch:AVX 
gcc:QMAKE_CXXFLAGS_RELEASE += -O3 -march=native -fopenmp -D_GLIBCXX_PARALLEL 
+1

giusto! C'è una lista del compilatore che definisce da qualche parte? Come se un giorno volessi usare clang? (anche se penso che le opzioni siano compatibili con gcc, non è vero?) –

+0

@ Jean-MichaëlCelerier: Sì, hai ragione: almeno per ora, Clang prova ad avere opzioni compatibili con gcc, quindi non dovrebbe esserci problemi finché non usi nessuna opzione esotica ...;) – mozzbozz

+0

@ Jean-MichaëlCelerier: E secondo la tua prima domanda: stavo cercando un elenco di compiler scope per qmake ora per un paio di minuti (ne avevo bisogno anche io) ma non ho trovato nulla:/ma per tentativi -e-errore Ho scoperto che MinGW è semplicemente "mingw" (quindi abbastanza simile a "gcc" e "msvc" -> facile da indovinare); Quindi per clang sono abbastanza sicuro che sia "clang";) EDIT: Questo potrebbe aiutare: http://stackoverflow.com/questions/14523148/compiler-scope-values-in-qmake – mozzbozz

0

Ecco un file di progetto che ho utilizzato. Funziona per Windows (msvc) e Linux (GCC)

QT = core gui widgets 

HEADERS += \ 
    render.h 

SOURCES += \ 
    main.cpp \ 
    render.cpp 

QMAKE_CXXFLAGS_RELEASE -= -O 
QMAKE_CXXFLAGS_RELEASE -= -O1 
QMAKE_CXXFLAGS_RELEASE -= -O2 

win32 { # For Windows 
    QMAKE_CXXFLAGS += -openmp 
    QMAKE_CXXFLAGS += -arch:AVX 
    QMAKE_CXXFLAGS += -D "_CRT_SECURE_NO_WARNINGS" 
    QMAKE_CXXFLAGS_RELEASE *= -O2 
} 

linux { # For Linux 
    QMAKE_CXXFLAGS += -fopenmp 
    QMAKE_LFLAGS += -fopenmp 
    QMAKE_CXXFLAGS += -mavx 
    QMAKE_CXXFLAGS_RELEASE *= -O3 
} 
+0

Hmm, com'è migliore del post originale? Inoltre, non hai bisogno di core e gui per la variabile QT. Sono inclusi di default! – lpapp

+0

Beh, per uno l'OP ha detto che il suo post non funzionava. Immagino che non ci siano stati problemi. Ma ho provato il tuo esempio. Per me non funziona. Devo aggiungere a GCC 'QMAKE_LFLAGS + = -fopenmp', altrimenti ricevo un sacco di errori di linker (' errore: riferimento non definito a omp_get_num_threads' e così via). –

+0

Il problema con questa risposta è che non è possibile utilizzarlo per distinguere tra MinGW e MSVC, ad esempio ... – mozzbozz