2011-03-04 13 views
8

मैं परियोजना के लिएqmake में स्रोत निर्देशिका का संदर्भ कैसे लें?

version.target = version.h 
version.commands = bash generate-version.sh 

QMAKE_EXTRA_TARGETS += version 

PRE_TARGETDEPS += version.h 

जोड़ा है, लेकिन इसे चलाने के लिए "generate-version.sh" गंतव्य निर्देशिका में प्रयास करता है:

make: Leaving directory `.../qqq-build-desktop' 
make: Entering directory `.../qqq-build-desktop' 
Makefile:236: warning: overriding commands for target `version.h' 
Makefile:233: warning: ignoring old commands for target `version.h' 
bash generate-version.sh 
bash: generate-version.sh: No such file or directory 
make: Leaving directory `.../qqq-build-desktop' 

वहाँ $$ है DESTDIR, लेकिन मैं नहीं दिख रहा है $$ SRCDIR। Qmake (या इसे फिर से लिखने के लिए) में प्रोजेक्ट निर्देशिका का संदर्भ कैसे लें?

उत्तर

10

मेरी पहली सोचा

version.commands = bash generate-version.sh 

इतनी के रूप में एक खोल स्क्रिप्ट आह्वान करने के लिए नहीं के पुनर्लेखन के लिए प्रयास करने के लिए है। शायद आप एक लाइन में बयान के सभी गठजोड़ कर सकते हैं:

version.commands = echo \'char VERSION[]=\"1.0\";\' > version.h && ls && echo Done 

आप स्क्रिप्ट लागू के साथ फंस रहे हैं, तो शायद लोक निर्माण विभाग या OUT_PWD आप के लिए क्या देख रहे हैं। qmake Variable Reference

पीडब्ल्यूडी

से यह चर पूरा पथ निर्देशिका जहां qmake प्रोजेक्ट फ़ाइल (project.pro) स्थित है के लिए अग्रणी में शामिल है।

OUT_PWD

यह चर पूरा पथ निर्देशिका जहां qmake उत्पन्न Makefile स्थानों के लिए अग्रणी में शामिल है।

दस्तावेज में उल्लिखित एक चेतावनी यह है कि यदि आप एक रिकर्सिव क्यूमेक कर रहे हैं, तो पीडब्ल्यूडी संदर्भित करता है कि शीर्ष स्तर .pro फ़ाइल कहां से पढ़ी गई थी। इस प्रकार यदि आप qmake -r को {proj-root} से चलाते हैं, जब उप/उप/उप/dir-proj.pro अंत में पढ़ा जाता है, तो पीडब्लूडी अभी भी {proj-root} को इंगित करेगा।

कि generate-version.sh मानते हुए अपने शीर्ष स्तर .pro फ़ाइल के रूप में एक ही निर्देशिका में है, तो आप कोशिश कर सकते हैं:

version.commands = bash $$PWD/generate-version.sh 
+0

संस्करण प्राप्त करने के लिए इसे ".git" या ".svn" निर्देशिकाओं तक पहुंचने के लिए वैसे भी आवश्यक है, इसलिए हमें किसी भी मामले में $$ PWD की आवश्यकता है। –

+1

यदि .pri फ़ाइल में शामिल किया गया है, तो पीडब्ल्यूडी निर्देशिका में निर्देशित करता है जहां .pri रहता है, न कि .pro फ़ाइल की मूल निर्देशिका। क्यूटी कम से कम int Qt 5.6। .pri फ़ाइल में मूल .pro निर्देशिका प्राप्त करने का कोई तरीका है ..? –

1

मैं एक बेहतर और क्लीनर समाधान

version.target = version.h 
version.commands = bash ${QMAKE_VAR__PRO_FILE_PWD_}/generate-version.sh 
QMAKE_EXTRA_TARGETS += version 

पाया परिवर्तनीय _PRO_FILE_PWD_ क्यूटी 4.5 के बाद से प्रलेखित है और इसमें प्रोजेक्ट फ़ाइल का उपयोग करने वाली निर्देशिका में पथ शामिल है (.pro फ़ाइल शामिल है)

लेकिन के लिए इस चर का उपयोग करने के लिए QMAKE_EXTRA_TARGETS, QMAKE_VAR_ को जोड़ा जाना चाहिए।

+0

काम नहीं करता है। जब मैं '$$ PWD' को' $ {QMAKE_VAR__PRO_FILE_PWD_} में बदलता हूं, तो यह संकलित करने में विफल रहता है। मेकफ़ाइल में शाब्दिक '$ {QMAKE_VAR__PRO_FILE_PWD_}' है। –

+0

qtcreator – benjarobin

+0

का आपका संस्करण क्या है मैं सादा "qmake-qt4" के साथ जांच कर रहा था। 'क्यूमेक संस्करण 2.01 ए' अब (जब मैं इसका परीक्षण कर रहा था तब मैं संस्करण को नहीं जानता)। –

0

पीडब्ल्यूडी

पूरा पथ निर्देशिका वर्तमान फ़ाइल युक्त करने के लिए अग्रणी पार्स किया जाता निर्दिष्ट करता है। छाया निर्माण का समर्थन करने के लिए प्रोजेक्ट फ़ाइलों को लिखते समय स्रोत पेड़ के भीतर फ़ाइलों को संदर्भित करने के लिए यह उपयोगी हो सकता है।

0

मैं का उपयोग करें (लिनक्स और जी ++)

DEFINES += SVN_VERSION=\\\"\""`svnversion $$PWD`\""\\\" 
DEFINES += COMPILE_DATE=\\\"\""`date`\""\\\" 
DEFINES += SW_VERSION=\\\"\"0.5\"\\\" 

जो मैक्रो SVNVERSON को परिभाषित करता है SVN संस्करण होने के लिए। C++ से यह पहुंचने के लिए:

QString svnVersion = SVN_VERSION; 
QString swVersion = SW_VERSION; 

स्पष्टीकरण:

-DSVN_VERSION=\""`svnversion /path/to/my/source`"\" 

जैसा कि आप देख कुछ पलायन खोल स्तर पर आवश्यक हैं: खोल पर मैं इस कॉल देखना चाहते हैं। .pro-file में इसे दो बार से बच जाना होगा।

0

यह काम करता है और समझने में आसान है।

version.commands = (cd $${PWD}; generate-version.sh) 
संबंधित मुद्दे