द्वारा जगह ले ली है के परिशिष्ट के रूप में इरादा रखता प्रयोग की जाने वाली है अगर तुम सिर्फ एक प्राप्त करने के लिए एक निरंतर (जैसे निर्धारित करने के बजाय खोल कोड निष्पादित करने के लिए चाहते हैं संस्करण संख्या या दिनांक):
या तो $$system()
का उपयोग करें। यह रन जब qmake क्रियान्वित किया जाता है:
DEFINES += GIT_VERSION=$$system(git describe --always)
या $()
का उपयोग करता है, तो कोड रन होना चाहिए कि हर (अर्थात जब makefile निष्पादित किया जाता है) का निर्माण पर। DEFINES
आप आदेश से बचने के लिए अगर यह रिक्ति की जरूरत के लिए, अन्यथा qmake सम्मिलित करता है अवांछित -D
की:
DEFINES += GIT_VERSION='$(shell git describe --always)'
यह तो makefile में सचमुच कॉपी किया जायेगा।
DEFINES += BUILD_DATE='"$(shell date)"'
आप एक स्ट्रिंग पाने के लिए अपने मूल्य के आसपास उद्धरण की जरूरत है, यह थोड़ा बदसूरत हो जाता है:
आदेश के उत्पादन रिक्त स्थान है, तो आप (मेकअप के लिए इस समय) एस्केप्मेंट की एक और परत की जरूरत
DEFINES += BUILD_DATE='"\\\"$(shell date)\\\""'
मैं इस मामले में preprocessors stringify आपरेशन का उपयोग करने की सिफारिश करेंगे:
#define _STR(x) #x
#define STR(X) _STR(x)
printf("this was built on " STR(BUILD_DATE) "\n");
+1 यह पूरी तरह से काम करता है, धन्यवाद! जैसा आपने कहा था, मेकफ़ाइल में '-DWINVER = 0x0500' जोड़ा गया। पीएस - मुझे उद्धरण की आवश्यकता नहीं थी क्योंकि वहां कोई जगह नहीं है। ;) –
पोस्टरिटी के लिए, यदि आप qmake फ़ाइल में स्ट्रिंग मान को परिभाषित करना चाहते हैं, तो ऐसा लगता है कि आपको स्लेश और उद्धरण के अजीब संयोजन का उपयोग करना होगा: DEFINES + = MY_DEF = '\\ "string \\"' – JCooper