2011-07-21 2 views
10

Qt Creator 2.2.1とQt 4.7.4(32ビット)を使用して出力を実行可能なプログラムをビルドしました。 LIBGCC_S_DW2-1.DLL Qt Creatorでの依存ファイルの自動コピー

  • QTCORE4.DLL
  • MINGWM10.DLL
    • KERNEL32.DLL
    • MSVCRT.DLL:DependencyWalker使用してexeファイルを開くと、それはexeファイルは次のDLLを使用していることを示していますビルド後の私が欲しい
    • QTGUI4.DLL

    すべて依存ファイル(上記のリストの最初の2つ)を除いて、exeが置かれているディレクトリに自動的にコピーされるWindows固有のファイルを除き、他のプロジェクトでは異なる場合があります。

    コマンドラインスクリプトを使用せずに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

    これを使用するときは注意してください。あなたはシェルクォート/パス機能を取り除くことに誘惑されるかもしれませんが、あなたはそれをしたくありません。 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でやりたいことができます。 "プロジェクト" QtCreatorのタブ(私のバージョンで

    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 
    

    2.4.1 =:(jwernernyによって提案されたものに類似)

    プロジェクト(.PRO)ファイルへのディレクティブ "をインストール" を追加します

    • ヒット "ビルドステップを追加"
    • 選択
    • まま "作る" "オーバーライドを..."
    • 空:)あなたは今、余分なビルドステップを追加します

    を、これらの設定は、例えば、あなたが第二部をしなければならないプロジェクトファイル(ビルドステップを追加)新しいビルド構成を作成するたびに(一緒に保存されていないので:0

  • は、「引数の作成」で「インストール」を入力しますリリースとデバッグ用に1つずつ)、プロジェクトを新しい場所にチェックアウトします。

  • -1

    ノーノーノー0_o :)

    1. は、ファイルを展開するためにいくつかのディレクトリを作成し、すなわち "ビン"。
    2. すべて。プロファイル書き込み

      DLLDESTDIR = ../../myproject/bin(...いくつかのディレクトリの構造体...)

      QMAKE_POST_LINK = windeployqt --compilerランタイム$$ DLLDESTDIR

    DLLDESTDIR - ファイル名がTARGET(dllおよびexe)の完全パス。

    終了!

    +0

    あなたはなぜこれを行うべきかについていくつかの説明を追加することができます。 –

    関連する問題