2013-08-22 7 views
6

दोनों के लिए हैंडलिंग विकल्प मैं एक प्रोजेक्ट फ़ाइल बनाना चाहता हूं जो एमएसवीसी और जीसीसी दोनों के साथ काम करेगा।qmake: gcc और msvc

उदाहरण के लिए, गति के लिए अनुकूलित करने के लिए आप cl /O2 और g++ -O3 करेंगे।

लेकिन मुझे नहीं पता कि परियोजना बनाने के लिए परियोजना फ़ाइल को कैसे बताना है। मुझे कुछ पसंद आएगा:

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

जो दुख की बात नहीं करता है।

अन्य तरीका mkspecs को बदलने और मेरे ऐप के साथ नए लोगों को बंडल करना होगा, लेकिन यह बहुत पोर्टेबल नहीं है। धन्यवाद!

+0

क्या समस्या है? यह कहकर आपका क्या मतलब है 'यह दुख की बात नहीं करता है'? – Bill

+0

क्या आपने दस्तावेज़ों में वर्णित 'win32' और 'win32' जैसे दायरे का उपयोग करने का प्रयास किया है? http://qt-project.org/doc/qt-4.8/qmake-advanced-usage.html –

+0

यदि मैं अपनी प्रोजेक्ट फ़ाइल में पहले कोड डालता हूं, तो मेरे पास अभी भी होगा: 'cl -O3 -march = मूल -fopenmp -D_GLIBCXX_PARALLEL' जबकि मैं 'cl/O2/openmp/arch: AVX' –

उत्तर

8

जीन, सटीक होना करने के लिए, आप का उपयोग करना चाहिए के लिए काम करता है यह आपके विवरण के आधार पर:

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

सही! क्या कंपाइलर की एक सूची कहीं परिभाषित है? जैसे एक दिन मैं क्लैंग का उपयोग करना चाहता हूं? (भले ही मुझे लगता है कि विकल्प जीसीसी के साथ संगत हैं, है ना?) –

+0

@ जीन-माइकलरेलियर: हाँ, आप सही हैं: कम से कम अभी के लिए, क्लैंग जीसीसी के साथ अनुकूल विकल्प रखने की कोशिश करता है, इसलिए वहां नहीं होना चाहिए जब तक आप किसी भी विदेशी विकल्प का उपयोग नहीं करते हैं तब तक समस्याएं ...;) – mozzbozz

+0

@ जीन-माइकलसेलरियर: और आपके पहले प्रश्न के अनुसार: मैं अब कुछ मिनटों के लिए क्यूमेक के लिए एक कंपाइलर स्कोप सूची ढूंढ रहा हूं (मुझे इसकी भी आवश्यकता है) लेकिन कुछ भी नहीं मिला:/लेकिन परीक्षण से -और-त्रुटि मैंने पाया कि MinGW बस "mingw" है (इसलिए "gcc" और "msvc" -> अनुमान लगाना आसान है); तो क्लैंग के लिए मुझे पूरा विश्वास है कि यह "clang" है;) संपादित करें: यह मदद कर सकता है: http://stackoverflow.com/questions/14523148/compiler-scope-values-in-qmake – mozzbozz

0

यहां एक प्रोजेक्ट फ़ाइल है जिसका उपयोग मैं कर रहा हूं। यह Windows (MSVC) और लिनक्स (जीसीसी)

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

हम्म, यह मूल पोस्ट से बेहतर कैसे है? इसके अलावा, आपको क्यूटी वैरिएबल के लिए कोर और गुई की आवश्यकता नहीं है। वे डिफ़ॉल्ट रूप से शामिल हैं! – lpapp

+0

ठीक है एक के लिए ओपी ने कहा कि उनकी पोस्ट काम नहीं कर रही थी। मुझे लगता है कि कोई समस्या नहीं थी। लेकिन मैंने आपके उदाहरण की कोशिश की। यह मेरे लिए काम नहीं करता है। मुझे जीसीसी 'QMAKE_LFLAGS + = -fopenmp' में जोड़ना है अन्यथा मुझे लिंकर त्रुटियों का एक गुच्छा मिलता है (' त्रुटि: omp_get_num_threads' के लिए अपरिभाषित संदर्भ और आगे)। –

+0

इस उत्तर के साथ समस्या यह है कि आप इसका उपयोग मिन्गब्लू और एमएसवीसी के बीच अंतर करने के लिए नहीं कर सकते हैं उदाहरण के लिए ... – mozzbozz

 संबंधित मुद्दे