2012-10-13 21 views
6

बनाते समय "qmake" चलाने के लिए "मेरी कुछ परियोजनाओं में मैं .pro फ़ाइल में कॉन्फ़िगर किए गए कुछ पूर्व-निर्माण चरण का उपयोग करता हूं। तो qmake जब भी सक्रिय हो, इस चरण को निष्पादित करेगा।फोर्स क्यूटी निर्माता

अब क्यूटी क्रिएटर में, जब मैं निर्माण करता हूं (जब भी पूरी परियोजना को पूरी तरह पुनर्निर्माण करता है), यह हमेशा qmake नहीं चलाता है, क्योंकि यह चालाक होने और इसे अनुकूलित करने का प्रयास करता है। यह केवल तब चलता है जब .pro फ़ाइल बदल दी गई है, जिससे कई समस्याएं आती हैं।

इसके अलावा एक आम मुद्दा है, जब आप एक वर्ग के बाद QObject से इनहेरिट कि फाइल पर qmake चल कर, इसे और नोटिस नहीं होगा उस पर इसलिए नहीं रन moc। QtCreator में "बिल्ड" मेनू के माध्यम से मैन्युअल रूप से qmake चलाकर इस तरह के मुद्दों को हल किया जाता है। लेकिन अगर मैं इसे भूल जाता हूं तो मैं कभी-कभी संकलन त्रुटियों से उलझन में हूं क्योंकि मुझे इसकी वजह है और यह वास्तव में कष्टप्रद है।

(कैसे) मैं इस परियोजना को बनाने के दौरान हमेशा करने के लिए QtCreator को मजबूर कर सकता हूं?

मैं परियोजना विन्यास में एक निर्माण कदम रूप qmake जोड़ने के बारे में सोचा था, लेकिन यह इस समस्या को हल करने के लिए एक गंदा हैक हो रहा है।

उत्तर

1

मुझे लगता है कि आपका सबसे अच्छा विकल्प आपके क्यूटी क्रिएटर को कस्टमाइज़ कर रहा है। यह QtCreator के लिए एक प्लगइन लिखकर किया जा सकता है, या आप Qt4ProjectManager नामक प्लगइन का सॉस कोड बदल सकते हैं, फिर इसे अपने लिए बनाएं। यह जटिल हो सकता है, हालांकि, एक समाधान हो सकता है।

6

एक और गंदे हैक लेकिन थोड़ा अधिक लचीला: लिनक्स/मैक पर "बिल्डप्रोजेक्टफाइल.pro" को एक बिल्ड चरण के रूप में जोड़ें या sth को बाहरी टूल कॉल असाइन करें। स्पर्श की तरह "* .pro" अपनी वर्तमान परियोजनाओं में काम कर रहे निर्देशिका में चलाएं। जब समर्थक फ़ाइल बदल जाती है (जिसे स्पर्श से नकल किया जाता है) qmake निष्पादित किया जाता है। अधिक क्लीनर नहीं है लेकिन बाहरी उपकरण प्लस हॉटकी समाधान प्रत्येक प्रोजेक्ट के बिल्डस्टेप्स में qmake जोड़ने से अधिक लचीला है।

अद्यतन: मुझे अंततः इसके लिए एक पूरी तरह से संतोषजनक समाधान मिला। समर्थक फ़ाइल जोड़ें:

qmakeforce.target = dummy 
    qmakeforce.commands = rm -f Makefile ##to force rerun of qmake 
    qmakeforce.depends = FORCE 
    PRE_TARGETDEPS += $$qmakeforce.target 
    QMAKE_EXTRA_TARGETS += qmakeforce 

यह Makefile उत्पन्न हटाने से एक इस प्रकार बलों हर निर्माण के लिए फिर से चलाएं को qmake।

+0

यह वही था जो मैं ढूंढ रहा था! मेरे पास कुछ कदम भी हैं जिन्हें प्रत्येक निर्माण के साथ निष्पादित करने की आवश्यकता है ताकि मेकफ़ाइल को हर बार काफी परेशान न किया जा सके।नोट: यह केवल यूनिक्स/लिनक्स प्लेटफॉर्म पर मान्य है क्योंकि 'आरएम' कमांड विंडोज पर उपलब्ध नहीं है। इस परिवर्तन को "qmakeforce.commands = rm -f मेकफ़ाइल" को "qmakeforce.commands = $$ QMAKE_DEL_FILE मेकफ़ाइल" में बदलने के लिए। – Hampus

1

मैंने जो किया है वह एक मेकफ़ाइल बनाया गया है जो स्पष्ट रूप से qmake को कॉल करता है। बेशक, यह है कि मैं दो makefiles है, लेकिन मेरे प्रोजेक्ट फाइल में, मैं

MAKEFILE = makefile_qt 

जिसका अर्थ है कि उत्पन्न makefile कि नाम होगा का मतलब है।

तो, makefile मैं मैन्युअल रूप से बनाई गई के लिए, मेरे पास है:

default: 
    qmake; 
    ${MAKE} -f makefile_qt; 

फिर, QtCreator से, मैं सिर्फ नियमित रूप से मेकअप, जो makefile लागू हो जाएगी कहते हैं। या आप Qt- जेनरेट किए गए मेकफ़ाइल को छोड़ सकते हैं, और केवल मैन्युअल रूप से बनाए गए कॉल को कॉल करने के लिए मेक-एफ मेकफ़ाइल कॉल करें। मैं भूल जाता हूं कि किसके पास प्राथमिकता, मेकफ़ाइल या मेकफ़ाइल है, और मुझे यकीन नहीं है कि यह हमेशा एक जैसा है।

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