2015-08-17 11 views
5

तो मैं qmake का उपयोग अपने कार्यक्रम बनाने के लिए है, लेकिन मैं हमेशा हूँ मेरी डिबग और संदेश के साथ बढ़ावा पुस्तकालयों रिलीज के बीच एक संघर्ष होने:क्यूटी निर्माता का लक्ष्य (डिबग/रिलीज) (दृश्य स्टूडियो) पता लगाने के लिए कैसे

libboost_system-vc120-mt-s-1_58.lib(error_code.obj):-1: error: LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj 

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

message($$CONFIG) 

जो qmake के विन्यास प्रिंट होगा।

रिहाई के लिए::

लेक्स याक डिबग अपवाद depend_includepath testcase_targets import_plugins import_qpa_plugin rtti_off incremental_off खिड़कियों क्यूटी warn_on रिहाई link_prl वृद्धिशील फ्लैट precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe C++ 11 डिबग स्थिर RTTI no_plugin_manifest परिणाम इस प्रकार हैं QPA Win32 MSVC copy_dir_files

जारी डिबग के लिए:

लेक्स याक डिबग अपवाद depend_includepath testcase_targets import_plugins import_qpa_plugin rtti_off incremental_off खिड़कियों क्यूटी warn_on रिहाई link_prl वृद्धिशील फ्लैट precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe C++ 11 डिबग स्थिर RTTI no_plugin_manifest QPA Win32 MSVC copy_dir_files

सूचना है कि दोनों डीबग और रिलीज शामिल है ... और मुझे आश्चर्य है कि क्यों ...

मैं यह इंगित करना चाहता हूं कि मैंने इस क्यूटी संस्करण को स्रोत से संकलित किया है। लेकिन जब मैंने ऐसा किया तो कोई अजीब चीज नहीं थी। मैं इसे संकलित करने के लिए निम्न आदेश का इस्तेमाल किया (तब सरल nmake साथ संकलन कॉन्फ़िगर करें देखें):

configure -debug-and-release -opensource -platform win32-msvc2013 -opengl desktop -static -nomake examples -nomake tests 

मैं आदेश को जोड़कर एक सुस्त समाधान की कोशिश की: मेरे मेकअप फ़ाइल में debug:CONFIG-=release, लेकिन उस रिलीज़ संस्करण डिबग बनने के लिए कारण होगा जब मैं क्यूटी निर्माता से रिहाई का चयन करता हूं तो 14 एमबी के बजाय 30 एमबी आकार के साथ।

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

QMAKE_CFLAGS += /MT 

QT  += core gui 

unix:QMAKE_CXXFLAGS += -std=c++11 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

TARGET = MyProg 
TEMPLATE = app 

तो यह समस्या क्यों हो रही है? मेरा डीबग क्यों है या एक डीबग रिलीज और रिलीज क्यों? मैं उनके बीच अंतर कैसे कर सकता हूं?

कृपया पूछें कि क्या आपको कोई अतिरिक्त जानकारी चाहिए या नहीं।

+0

http://code.qt.io/cgit/qt/qtbase.git/tree/configure#n2401 कि '-debug और रिहाई का कहना है 'एक मैक-ओनली विकल्प है। – Mitch

+0

@ मिच अजीब ... संकलन के साथ कभी समस्या नहीं थी! –

+0

यदि यह एक बग की तरह लगता है, तो कृपया इसकी रिपोर्ट करें। ऐसा लगता है कि आपको कम से कम एक चेतावनी मिलनी चाहिए, और इससे आपको बहुत समय बचा सकता है ... लेकिन मुझे qmake के बारे में बहुत कुछ पता नहीं है। – Mitch

उत्तर

0

जवाब मैं Qt project org faq 355

में लगता है कि आप हमेशा नाम क्यूटी निर्माता अपने निर्माण आपको लगता है कि मेरे मामले में (क्यूटी 5 अपने समर्थक फ़ाइलों में निम्नलिखित सरल समाधान का उपयोग कर सकते के लिए पता चलता है स्वीकार करते हैं है।5) के लिए लिनक्स, मैक और विंडोज काम करता है:

# to distinguish between debug and release executable as target 
# we define the variables releaseExec and debugExec 
# this only works if the $$OUT_PWD has "Release" in its name 
BDIR = $$OUT_PWD 
BDIR_STRIPPED = $$replace(BDIR,Release,) 
equals (BDIR,$$BDIR_STRIPPED): CONFIG+= debugExec 
else: CONFIG+= releaseExec 

हम चर releaseExec और debugExec इस्तेमाल किया क्यूटी कॉन्फ़िग चर के साथ नाम टकराव से बचने के लिए।

अब आप स्विच बयान का उपयोग कर सकते हैं:

releaseExec: warning ("this is a release build") 
debugExec: warning ("this is a debug build") 
संबंधित मुद्दे