2011-07-21 14 views
10

में निर्भर फ़ाइलों की स्वचालित प्रतिलिपि मैंने क्यूटी निर्माता 2.2.1 और क्यूटी 4.7.4 (32 बिट) का उपयोग करके एक प्रोग्राम बनाया है जिसका आउटपुट निष्पादन योग्य है। exe DependencyWalker का उपयोग कर खुलने यह पता चलता है कि exe निम्नलिखित DLLs उपयोग करता है:क्यूटी निर्माता

  • Kernel32.dll
  • msvcrt.dll
  • MINGWM10.DLL
  • LIBGCC_S_DW2-1.DLL
  • QTCORE4.DLL
  • QTGUI4.DLL

मैं चाहता हूँ निर्माण के बाद सभी निर्भर फ़ाइलों (जो किसी अन्य प्रोजेक्ट में भिन्न हो सकती हैं) विंडोज विशिष्ट फाइलों (उपरोक्त सूची में पहले दो) को छोड़कर, निर्देशिका में स्वचालित रूप से कॉपी की गई है जहां exe स्थित है।

कमांड लाइन स्क्रिप्टिंग का उपयोग किए बिना मैं क्यूटी निर्माता या क्यूटी सिस्टम में इसे कैसे कर सकता हूं? धन्यवाद।

उत्तर

11

क्यूटी 5.3 में, आप आवश्यक पुस्तकालयों को स्वचालित रूप से कॉपी करने के लिए windeployqt क्यूटी उपकरण का उपयोग करने में सक्षम हो सकते हैं।

प्रोजेक्ट की .pro फ़ाइल में निम्नलिखित परिवर्धन चाल चलाना चाहिए, लेकिन आपको अपनी विशेष स्थिति के आधार पर कुछ समायोजन करना पड़ सकता है।

isEmpty(TARGET_EXT) { 
    win32 { 
     TARGET_CUSTOM_EXT = .exe 
    } 
    macx { 
     TARGET_CUSTOM_EXT = .app 
    } 
} else { 
    TARGET_CUSTOM_EXT = $${TARGET_EXT} 
} 

win32 { 
    DEPLOY_COMMAND = windeployqt 
} 
macx { 
    DEPLOY_COMMAND = macdeployqt 
} 

CONFIG(debug, debug|release) { 
    # debug 
    DEPLOY_TARGET = $$shell_quote($$shell_path($${OUT_PWD}/debug/$${TARGET}$${TARGET_CUSTOM_EXT})) 
} else { 
    # release 
    DEPLOY_TARGET = $$shell_quote($$shell_path($${OUT_PWD}/release/$${TARGET}$${TARGET_CUSTOM_EXT})) 
} 

# # Uncomment the following line to help debug the deploy command when running qmake 
# warning($${DEPLOY_COMMAND} $${DEPLOY_TARGET}) 

# Use += instead of = if you use multiple QMAKE_POST_LINKs 
QMAKE_POST_LINK = $${DEPLOY_COMMAND} $${DEPLOY_TARGET} 
+0

के लिए काम नहीं करने के लिए धन्यवाद मुझे इस सुविधा के बारे में बताने के लिए धन्यवाद। :) – Donotalo

+1

इसका उपयोग करते समय सावधान रहें। आप शैल कोट/पथ कार्यक्षमता को पट्टी करने के लिए लुभाने वाले हो सकते हैं, लेकिन आप वास्तव में ऐसा नहीं करना चाहते हैं। क्यूटी को स्लेश की एक और लिनक्स-शैली का उपयोग करना पसंद है। यह आपके कोड को अव्यवस्थित और बदसूरत लग सकता है, लेकिन यह सुरक्षा बॉयलरप्लेट के लायक है। –

+0

धन्यवाद यह काम करता है। लेकिन क्या इस प्रतियों की विशिष्ट फाइलों को हटाने के लिए "साफ करें" पाने का कोई तरीका है? मुझे लगता है कि मैं पाठ्यक्रम की पूरी निर्देशिका को हटा सकता हूं - बस आश्चर्य है कि कोई अन्य दृष्टिकोण है या नहीं। – Zitrax

5

मैं प्रोजेक्ट के लिए आपकी * .pro फ़ाइल संशोधित करता हूं और INSTALLS का उपयोग करता हूं। वास्तव में फ़ाइलों को स्थानांतरित करने का कारण बनने के लिए, आपको make install चलाने की आवश्यकता होगी। क्यूटी निर्माता में, आप इसे "प्रोजेक्ट्स" अनुभाग में जाकर और एक नया निर्माण चरण जोड़कर अपनी सामान्य बिल्ड प्रक्रिया के हिस्से के रूप में जोड़ सकते हैं।

## This sets MY_LIB_FILES the libs you want and should also correctly resolve 
## the location of the libs. 

win32 {    ## For Windows builds 
    # Note: Check to make sure of file name case 

    MY_LIB_FILES += $$QMAKE_LIBDIR_QT/MINGWM10.DLL 
    MY_LIB_FILES += $$QMAKE_LIBDIR_QT/LIBGCC_S_DW2-1.DLL 
    MY_LIB_FILES += $$QMAKE_LIBDIR_QT/QTCORE4.DLL 
    MY_LIB_FILES += $$QMAKE_LIBDIR_QT/QTGUI4.DLL 
} 

unix {      ## For unix builds 
    # MY_LIB_FILES += $$QMAKE_LIBDIR_QT/...xxxxxx.... 
} 

## Define what files are 'extra_libs' and where to put them 
extra_libs.files = MY_LIB_FILES 
extra_libs.path = $$DESTDIR 

## Tell qmake to add the moving of them to the 'install' target 
INSTALLS += extra_libs 
+0

मुझे लगता है कि उनके प्रश्न का जटिल हिस्सा ** ** निर्भर फाइलों के बारे में ** ** स्वचालित रूप से ** ** – vrince

+0

@vrince: कम से कम यह मेरी समस्या को आंशिक रूप से हल करेगा। – Donotalo

+0

मैं इसे काम नहीं कर सकता। विंडोज 7 अल्टीमेट में 'इंस्टॉल इंस्टॉल' विकल्प क्या है? – Donotalo

4

भले ही पूरी तरह से स्वचालित नहीं है, आप क्यूटी निर्माता के साथ जो कुछ भी चाहते हैं उसके साथ आप प्रयास कर सकते हैं।

जोड़ें अपनी परियोजना (.pro) फाइल करने के लिए निर्देश "इंस्टॉल" (के समान क्या jwernerny द्वारा सुझाव दिया गया था):

win32 { 
    libstocopy.files = $$QMAKE_LIBDIR_QT/MINGWM10.DLL \ 
     ... (add other files) 
} 

# If using MSVC the code may end up in "release" or "debug" sub dir 
# Remove this if that is not the case 
win32 { 
    CONFIG(debug, debug|release): OUTDIR = debug 
    else: OUTDIR = release 
} 

libstocopy.path = $$OUT_PWD/$$OUTDIR 
INSTALLS += libstocopy 

"परियोजनाओं" QtCreator का टैब (मेरे संस्करण में = 2.4.1

  • हिट "चरण बिल्ड जोड़ें"
  • करें
  • छोड़ें "बनाओ" "अवहेलना ..." खाली
  • :) अब आप एक अतिरिक्त निर्माण चरण जोड़ते समय 0
  • पर "स्थापित" Enter "बहस करें:" चूंकि ये सेटिंग अपनी परियोजना फ़ाइल के साथ सहेजा नहीं जाता है

आप दूसरे भाग क्या करना है हर बार जब आप एक नए निर्माण विन्यास बनाने (चरण बिल्ड जोड़े) (जैसे रिलीज और डिबग के लिए प्रत्येक एक) या अपनी परियोजना को एक नए स्थान पर देखें।

-1

नो-नहीं-नहीं 0_o :)

  1. कुछ निर्देशिका फ़ाइलों को तैनात करने के बनाएँ, अर्थात "बिन"।
  2. प्रत्येक में।समर्थक फ़ाइल लिखने

    DLLDESTDIR = ../../myproject/bin (... कुछ निर्देशिका के struct ...)

    QMAKE_POST_LINK = windeployqt --compiler-क्रम $$ DLLDESTDIR

DLLDESTDIR - फ़ाइल नाम TARGET (डीएलएल और exe) के साथ पूरा पथ।

अंत!

+0

आप कुछ स्पष्टीकरण जोड़ सकते हैं कि उन्हें ऐसा क्यों करना चाहिए। –

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