2013-08-22 6 views
6

Ich möchte eine Projektdatei, die sowohl mit msvc und gcc funktionieren würde.qmake: Handling-Optionen für beide gcc und msvc

Zum Beispiel, um die Geschwindigkeit zu optimieren, würden Sie cl /O2 und g++ -O3 tun.

Aber ich weiß nicht, wie man die Projektdatei sagt, um den Unterschied zu machen. Ich möchte etwas wie:

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

was leider nicht funktioniert.

Andere Möglichkeit wäre, die Mkspecs zu ändern und die neuen mit meiner App zu bündeln, aber es ist nicht sehr portabel. Danke!

+0

Was ist das Problem? Was meinst du mit "es funktioniert nicht traurig"? – Bill

+0

Haben Sie versucht, einen Bereich wie 'win32' und'! Win32' zu verwenden, wie in den Dokumenten beschrieben? http://qt-project.org/doc/qt-4.8/qmake-advanced-usage.html –

+0

Wenn ich den Code, den ich vorher in meine Projektdatei eingefügt habe, hinzufügen, habe ich immer noch: 'cl -O3 -march = nativ -fopenmp -D_GLIBCXX_PARALLEL', während ich 'cl/O2/openmp/arch: AVX' möchte –

Antwort

8

Jean, um genau zu sein, sollten Sie dies auf der Grundlage Ihrer Beschreibung verwenden:

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

richtig! Gibt es eine Liste der Compiler definiert irgendwo? Wie wenn ich eines Tages klingeln möchte? (auch wenn ich denke, dass die Optionen mit gcc kompatibel sind, oder?) –

+0

@ Jean-MichaelCelerier: Ja, Sie haben recht: Clang versucht zumindest jetzt, Optionen zu haben, die mit gcc kompatibel sind, also sollte es keine geben Probleme, solange Sie keine exotischen Optionen verwenden ...;) – mozzbozz

+0

@ Jean-MichaelCelerier: Und zu deiner ersten Frage: Ich habe jetzt nach einer Compiler-Scope-Liste für qmake für ein paar Minuten gesucht (ich brauchte sie auch), konnte aber nichts finden:/aber probeweise -and-error Ich fand, dass MinGW einfach "mingw" ist (also ziemlich dasselbe wie "gcc" und "msvc" -> leicht zu erraten); Also für den Klang bin ich ziemlich zuversichtlich, dass es "clang" ist;) EDIT: Dies könnte helfen: http://StackOverflow.com/Questions/14523148/Compiler-Scope-Values-in-Qmake – mozzbozz

0

Hier ist eine Projektdatei, die ich verwendet habe. Es funktioniert für Windows (msvc) und 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, wie ist das besser als der ursprüngliche Beitrag? Außerdem benötigen Sie für die QT-Variable nicht core und gui. Sie sind standardmäßig enthalten! – lpapp

+0

Gut für einen der OP sagte sein Beitrag funktionierte nicht. Ich denke, es gab kein Problem. Aber ich habe dein Beispiel versucht. Es funktioniert nicht für mich. Ich muss zu GCC 'QMAKE_LFLAGS + = -fopenmp hinzufügen, sonst bekomme ich eine Reihe von Linker-Fehlern (' error: undefinierter Verweis auf omp_get_num_threads' usw.). –

+0

Das Problem mit dieser Antwort ist, dass Sie nicht zwischen MinGW und MSVC unterscheiden können ... – mozzbozz

Verwandte Themen