2015-05-28 6 views
8

मैं चेतावनी ++ जी पर सक्षम के साथ मेरी Qt5 आधारित परियोजना संकलन:क्यूएमके और क्यूटी 5 के साथ -सिस्टम (सिस्टम हेडर) के साथ क्यूटी के हेडर को कैसे शामिल करें?

# project.pro file 
QMAKE_CXXFLAGS += -std=c++11 -Wall -Wextra -Wconversion -Weffc++ 

जब संकलन, क्यूटी चेतावनी के बहुत सारे (सिर्फ एक सरल विजेट के साथ 1000 से अधिक), मेरे कोड से चेतावनी छुपा पैदा करता है।

चेतावनियों को दबाने के लिए -I के बजाय क्यूटी के शीर्षकों को निर्दिष्ट करते समय -isystem स्विच का उपयोग करने के लिए qmake को कैसे बताना है? मैं चेतावनी बंद नहीं करना चाहता हूं मैं उन्हें अपने कोड के लिए रखना चाहता हूं।

नोट: मैंने this SO question की जांच की लेकिन यह मेरे मामले में काम नहीं करता है, यह केवल Qt4 के लिए हो सकता है, मैं Qt5 का उपयोग करता हूं।

नोट 2: यह एक acknowledged bug है, मैं एक कामकाज की तलाश में हूं। मैं स्रोत 5.4.1 से संकलित qmake के हाल के संस्करण का उपयोग करता हूं, यह संस्करण सिस्टम हेडर को /include और /usr/include से सिस्टम हेडर के रूप में पास करता है लेकिन क्यूटी के शीर्षलेख नहीं।

नोट 3: मुझे पता है कि सीएमके काम करेगा लेकिन यह मेरे लिए एक विकल्प नहीं है।

+0

"वर्कअराउंड" क्यूमेक को एक पैच सबमिट करना है जो इसके लिए समर्थन जोड़ता है।या cmake पर स्विच करने के लिए, जहां मुझे आशा है कि यह एक हल समस्या है। –

+0

मेरे पास qmake का एक हालिया संस्करण है (मैं इसका उल्लेख करने के लिए प्रश्न संपादित करूंगा)। मैंने सीएमके के साथ प्रयास किया: 'include_directories (सिस्टम dir1 dir2)' यह काम करता है लेकिन मुझे qmake के साथ चिपकने की आवश्यकता है। धन्यवाद –

उत्तर

11

मैं क्यूटी के हेडर, (के रूप में अन्य जवाब में सुझाव दिया) प्रणाली के मार्ग में क्यूटी स्थापित करके एक तरह से और जीसीसी झंडे का उपयोग करके अपने pro फ़ाइल से सीधे दूसरे से चेतावनी को दबाने के लिए दो तरीके पाया।

  1. जब अपनी खुद की क्यूटी निर्माण, आपके सिस्टम पथ से एक के लिए शीर्षक की स्थापना पथ कॉन्फ़िगर करें:

    $ grep DEFAULT_INCDIRS mkspecs/qconfig.pri 
    QMAKE_DEFAULT_INCDIRS = /usr/include/c++/4.8 /usr/include/x86_64-linux-gnu/c++/4.8 /usr/include/c++/4.8/backward /usr/lib/gcc/x86_64-linux-gnu/4.8/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed /usr/include/x86_64-linux-gnu /usr/include 
    
    :

    $ ./configure -headerdir /usr/local/include 
    

    सिस्टम पथ /usr/include या /usr/local/include या बाकी में से एक में सूचीबद्ध हैं

    स्रोत: this thread क्यूटी की डेवेल सूची में।

    # the line below suppresses warnings generated by Qt's header files: we tell 
    # GCC to treat Qt's headers as "system headers" with the -isystem flag 
    QMAKE_CXXFLAGS += -isystem $$[QT_INSTALL_HEADERS] 
    

    जिसके परिणामस्वरूप जीसीसी कमांड लाइन की तरह दिखता है:

    g++ -c -pipe -isystem /usr/local/Qt-5.4.1/include -Wall ... 
        -I/usr/local/Qt-5.4.1/include 
        -I/usr/local/Qt-5.4.1/include/QtWidgets 
        ... 
    

    नोट क्यूटी के शामिल कैसे रास्तों

  2. या सीधे अपने क्यूटी pro फ़ाइल में, बस QMAKE_CXXFLAGS में -isystem फ्लैग जोड़ने अभी भी -I के साथ जोड़ा गया है, जिससे क्यूटी निर्माता सभी क्यूटी शीर्षकों को "देखने" की इजाजत देता है, लेकिन जीसीसी -isystem ध्वज देखता है और सभी उपफोल्डरों के लिए चेतावनियों को दबाता है।

+1

उस '$$ सिस्टम' की कोई ज़रूरत नहीं है - बस' $$ [QT_INSTALL_HEADERS] ':) – peppe

+0

का उपयोग करें मुझे ब्रैकेट सिंटैक्स के बारे में पता नहीं था - मैंने केवल' $$ QT_INSTALL_HEADERS' के साथ प्रयास किया और यह काम नहीं किया , मैं ब्रैकेट लापता था! मैं जवाब अपडेट कर दूंगा। धन्यवाद! –

+1

विधि 2 मेरे लिए पूरी तरह से काम करता है - धन्यवाद! –

1

क्या आपने सिस्टम पथ में क्यूटी स्थापित किया था? अन्यथा qmake -isystem पास नहीं करेगा।

आप देख सकते हैं प्रणाली रास्तों को पढ़ कर qmake के अनुसार जो रास्ते हैं आपके mkspec/qconfig.pri (आप configure चलाने के बाद), सिस्टम पथ QMAKE_DEFAULT_INCDIRS चर की तैयारी में हैं। यहाँ:

QMAKE_DEFAULT_INCDIRS = /usr/include/c++/4.8 /usr/include/x86_64-linux-gnu/c++/4.8 /usr/include/c++/4.8/backward /usr/lib/gcc/x86_64-linux-gnu/4.8/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed /usr/include/x86_64-linux-gnu /usr/include 
संबंधित मुद्दे