2010-07-27 10 views
42

मैं एक मूल्य के साथ qmake के साथ एक को परिभाषित कैसे जोड़ सकता हूँ: (के रूप में मैं उम्मीद)एक मूल्य के साथ qmake को परिभाषित करें?

उदाहरण के लिए, यह काम नहीं करता मेरी .pro फ़ाइल में:

DEFINES += WINVER 0x0500 

है और न ही

DEFINES += "WINVER 0x0500" 

कुछ भी संकलन शुरू होने से पहले मैं WINVER को 0x0500 के रूप में कैसे परिभाषित कर सकता हूं ताकि संकलन या आदेश को शामिल करके परिभाषा किसी भी तरह से प्रभावित न हो?

उत्तर

55

DEFINES += "WINVER=0x0500" मेरे लिए काम करता है।

इस तरह, -DWINVER=0x0500 संकलक की कमांड लाइन में जोड़ा गया है, जो सिंटैक्स जीसीसी/मिंगव कमांड लाइन प्रीप्रोसेसर परिभाषाओं के लिए अपेक्षा करता है (विवरण के लिए here देखें)।

+2

+1 यह पूरी तरह से काम करता है, धन्यवाद! जैसा आपने कहा था, मेकफ़ाइल में '-DWINVER = 0x0500' जोड़ा गया। पीएस - मुझे उद्धरण की आवश्यकता नहीं थी क्योंकि वहां कोई जगह नहीं है। ;) –

+6

पोस्टरिटी के लिए, यदि आप qmake फ़ाइल में स्ट्रिंग मान को परिभाषित करना चाहते हैं, तो ऐसा लगता है कि आपको स्लेश और उद्धरण के अजीब संयोजन का उपयोग करना होगा: DEFINES + = MY_DEF = '\\ "string \\"' – JCooper

37
DEFINES += MY_DEF=\\\"String\\\" 

यह स्वरूप, जब एक मैक्रो स्ट्रिंग तत्व

21

द्वारा जगह ले ली है के परिशिष्ट के रूप में इरादा रखता प्रयोग की जाने वाली है अगर तुम सिर्फ एक प्राप्त करने के लिए एक निरंतर (जैसे निर्धारित करने के बजाय खोल कोड निष्पादित करने के लिए चाहते हैं संस्करण संख्या या दिनांक):

या तो $$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"); 
+0

GIT_VERSION उदाहरण के लिए +1 और उद्धरण से बचने के बारे में नोट्स। ओटी लेकिन मुझे निम्नलिखित सबसे उपयोगी 'GIT_VERSION = \\\ "$$ सिस्टम (गिट वर्णन --always --abbrev = 0) \\\" 'नवीनतम टैग संस्करण प्राप्त करने के लिए, या वर्तमान प्रतिबद्धता में असफल रहा है –

4

ग्रेग का उत्तर एक .pro फ़ाइल में ठीक काम करता है। हालांकि, कमांड लाइन से qmake को कॉल करते समय, मुझे रिक्त स्थान छोड़ना पड़ा, यानी sth का उपयोग करें। क्यूटी इधर-उधर "रिक्त स्थान के साथ मान"

qmake DEFINES+="WINVER 0x0500" 
1

#define STRING *: निम्नलिखित की तरह, एक परिभाषित काम करने के लिए।प्रो फ़ाइल:

DEFINES += "VERSION_LOG=\"\\\"Version 2.5.1\\\"\"" 
DEFINES += "VERSION_QT=\"\\\"Qt 5.10\\\"\"" 

जो Makefile.Release फ़ाइल में देता है::

क्यूटी परियोजना फ़ाइल से एक #define STRING "को रिक्तियों के साथ मान" जोड़ने के लिए, हम लिखना पड़ा

DEFINES  = -DUNICODE -D_UNICODE -DVERSION_LOG="\"Version 2.5.1\"" -DVERSION_QT="\"Qt 5.10\"" -DQT_NO_DEBUG [...] 

सारांश में, कि लाइन पर: DEFINES += "VERSION_LOG=\"\\\"Version 2.5.1\\\"\""

पहली और आखिरी " qmake बताता है एक स्ट्रिंग

के रूप में पूरे वाक्य को पढ़ने के लिए पहली और आखिरी \" लिखते हैं पहली और आखिरी " एक " में \ एक में -DVERSION_LOG="\"Version 2.5.1\""

पहली और आखिरी \\\" लिखते हैं तो -DVERSION_LOG="\"Version 2.5.1\""

+0

बहुत बहुत धन्यवाद! यह वास्तव में मेरी मदद की! –

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