Автоматическое копирование зависимых файлов в Qt Creator - PullRequest
13 голосов
/ 21 июля 2011

Я собрал программу с использованием Qt Creator 2.2.1 и Qt 4.7.4 (32 бита), чей вывод - исполняемый файл. Открытие exe-файла с помощью DependencyWalker показывает, что он использует следующие библиотеки DLL:

  • KERNEL32.DLL
  • MSVCRT.DLL
  • MINGWM10.DLL
  • LIBGCC_S_DW2-1.DLL
  • QTCORE4.DLL
  • qtgui4.dll

Я хочу, чтобы после сборки все зависимые файлы (которые могут отличаться в некоторых других проектах), за исключением файлов Windows (первые два в приведенном выше списке), будут автоматически скопированы в каталог, где находится исполняемый файл. находится.

Как я могу сделать это в Qt Creator или системе Qt без использования сценариев командной строки? Спасибо.

Ответы [ 4 ]

13 голосов
/ 08 августа 2014

В 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}
5 голосов
/ 21 июля 2011

Я бы изменил ваш * .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
4 голосов
/ 30 ноября 2012

Даже если это не полностью автоматический режим, вы можете без особых усилий делать то, что хотите, с 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) вы теперь добавляете дополнительный шаг сборки:

  • Нажмите «Добавить шаг сборки»
  • Выберите «Сделать»
  • Оставьте «Переопределить ...» пустым
  • Введите «установить» в «Сделать аргументы:»

Поскольку этинастройки не сохраняются вместе с файлом вашего проекта, вы должны выполнять вторую часть (Add Build Step) каждый раз, когда создаете новую конфигурацию сборки (например, по одной для выпуска и отладки) или извлекаете ваш проект в новом месте.

0 голосов
/ 04 августа 2015

Нет-нет-нет 0_o:)

  1. Создайте каталог для развертывания файлов, например "bin".
  2. В каждый файл .pro пишите

    DLLDESTDIR = ../../myproject/bin (... некоторая структура dir ...)

    QMAKE_POST_LINK = windeployqt - время выполнения компилятора $$ DLLDESTDIR

DLLDESTDIR - полный путь с именем файла TARGET (dll и exe).

Конец!

...