Qt Creator中相关文件的自动复制

时间:2011-07-21 03:46:17

标签: c++ qt build-automation qt-creator

我使用Qt Creator 2.2.1和Qt 4.7.4(32位)构建了一个程序,其输出是可执行文件。使用DependencyWalker打开exe,它显示exe使用以下DLL:

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

我想在构建所有依赖文件之后(在某些其他项目中可能会有所不同),除了Windows特定文件(上面列表中的前两个)要自动复制到目录中exe位于。

如何在不使用命令行脚本的情况下在Qt Creator或Qt系统中执行此操作?感谢。

4 个答案:

答案 0 :(得分:13)

在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}

答案 1 :(得分: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

答案 2 :(得分:4)

即使不是完全自动的,您也可以轻松地用QtCreator做你想做的事。

将“INSTALLS”指令添加到项目(.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 arguments:”
  • 处输入“install”

由于这些设置不随项目文件一起保存,因此每次创建新的构建配置时都必须执行第二部分(添加构建步骤)(例如,每个用于发布和调试)或将项目签出到新的位置。

答案 3 :(得分:-1)

不 - 不 - 0_o:)

  1. 创建一些目录来部署文件,即" bin"。
  2. 在每个.pro文件中写

    DLLDESTDIR = ../../myproject/bin(..dir dir&s; s struct ...)

    QMAKE_POST_LINK = windeployqt --compiler-runtime $$ DLLDESTDIR

  3. DLLDESTDIR - 文件名为TARGET(dll和exe)的完整路径。

    结束!