2011-07-21 63 views
10

我已經使用Qt Creator 2.2.1和Qt 4.7.4(32位)構建了一個程序,其輸出是一個可執行文件。打開使用DependencyWalker的exe它表明EXE使用下列DLL:Qt Creator中相關文件的自動複製

    KERNEL32.DLL
  • MSVCRT.DLL
  • MINGWM10.DLL
  • LIBGCC_S_DW2-1.DLL
  • QTCORE4.DLL
  • QTGUI4.DLL

我想構建畢竟個依賴文件(在某些其他項目中可能會有所不同),但Windows特定文件(上面列表中的前兩個文件)將自動複製到exe所在的目錄中。

如何在不使用命令行腳本的情況下在Qt Creator或Qt系統中執行此操作?謝謝。

回答

11

在QT 5.3中,您可以使用windeployqt qt工具自動複製所需的庫。

以下對項目的.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

使用這個時要小心。您可能會試圖剝離shell引用/路徑功能,但您確實不想那樣做。 Qt喜歡使用更多的linux樣式的斜槓。它可能會讓你的代碼看起來雜亂和醜陋,但它是值得的安全樣板。 –

+0

感謝它的工作。但是,有沒有辦法讓「乾淨」刪除這個複製的特定文件?我想我可以刪除整個目錄 - 只是想知道是否有其他方法。 – Zitrax

5

我會修改項目的* .pro文件並使用INSTALLS。要真正導致文件被移動,您需要運行make install。在Qt Creator中,您可以將其添加爲常規構建過程的一部分,方法是進入「項目」部分並添加新的構建步驟。

## 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

我無法使它工作。什麼是Windows 7 Ultimate中的'make install'選項? – Donotalo

4

即使不是完全自動的,你可以花費很少的精力去做你想要的QtCreator。

添加 「安裝」 指令到您的項目(的.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 )你現在添加一個額外的構建步驟:

  • 命中 「添加生成步驟」
  • 選擇 「Make」
  • 休假 「覆蓋...」 空
  • 輸入「安裝」在「進行申辯:」

由於這些設置不會與你的項目文件中保存你所要做的第二部分(添加生成步驟),每次創建新的生成配置的時間(例如一個用於發佈和調試)或將您的項目簽出到新的位置。

-1

無無無0_o :)

  1. 創建一些目錄來部署的文件,即 「BIN」。
  2. 在每一個。親文件寫入

    DLLDESTDIR = ../../myproject/bin(...一些目錄的結構...)

    QMAKE_POST_LINK = windeployqt --compiler運行時$$ DLLDESTDIR

DLLDESTDIR - 文件名爲TARGET(dll和exe)的完整路徑。

End!

+0

你可以添加一些解釋,爲什麼他們應該這樣做。 –