Копирование файлов в build папку при компиляции проекта в Qt
У вас есть некоторый проект в среде Qt
. При компиляции проекта в соответствующей папке release
или debug
появляется скомпилированный EXE файл, который и запускается, например, через Qt Creator
. Очень часто требуется, чтобы в папке с скомпилированным EXE файлом были какие-то служебные файлы: картинки, MP3 файлы, служебные директории и др.
В чем проблема? Берем и копируем в эту папку нужные файлы и всё. Но, представим, что мы наш проект ведем с помощью Git. И в нашем репозитории есть файл .gitignore
, который игнорирует папки с скомпилированным проектом. Кстати, это очень даже хорошо и правильно.
Но при этом в Git не будут сохраняться эти дополнительные файлы, которые Qt не генерируют, но которые нужны для корректной работы EXE проекта (так как они находятся в игнорируемой папке).
Поэтому было бы полезно иметь специальную папку в папке проекта, из которой файлы будут автоматически копироваться в папку с скомпилированным EXE файлом при построении проекта.
Это позволит, например, в Git вести контроль за этими файлами, которые автоматически будут копироваться в папку с EXE файлом.
Постановка задачи
Имеется папка project
с проектом Qt (там находится .pro
файл).
В этой папке есть папка copy_to_build_dir
, в которой находятся те файлы, которые мы будем копировать в папку с скомпилированным проектом:
Допустим там находится такое барахло:
Есть папка build
(у разных людей она может называться по-разному и находится в разных местах), в которой есть папки release
и debug
, в одной из которых находится скомпилированный EXE файл.
Нужно при компиляции проекта все файлы и папки из папки copy_to_build_dir
скопировать в папку release
и debug
, где находится EXE файл.
Решение
В файле проекта .pro
добавим следующие строки:
CONFIG(release, debug|release): DESTDIR = $$OUT_PWD/release
CONFIG(debug, debug|release): DESTDIR = $$OUT_PWD/debug
copy_to_build.path = $$DESTDIR
copy_to_build.files = copy_to_build_dir/*
INSTALLS += \
copy_to_build
Фактически это все изменения, которые нужно произвести в проекте. Но, если мы скомпилируем проект, то нужные нам файлы не скопируются. Дело в том, что команда INSTALLS
сработает при запуске qmake
с параметром install
.
Если вы пользуйтесь Qt Creator, то вряд ли вы вручную запускаете утилиту qmake
.
Идем в раздел Projects
:
В разделе Build Steps
щелкаем по пункту Add Build Step
:
Выбираем пункт Make
:
В пункте Make arguments
пишем install
:
Всё. Теперь можем скомпилировать проект, и в папке с EXE файлом появится содержимое папки copy_to_build_dir
:
Обратите внимание на то, что при переключении режима компилировании с Release
на Debug
и наоборот эту процедуру в разделе Projects
надо будет повторить.
При удалении файла .pro.user
(он тоже игнорируется в .gitignore
для Qt, что правильно) процедуру в разделе Projects
тоже надо будет повторить.<ul><li>Qt logo 2016.svg by Qt Project / (2019-01-26)</li></ul>
Тэги:
- Qt
Категории:
- blog
- it
- programming
У вас есть некоторый проект в среде Qt
. При компиляции проекта в соответствующей папке release
или debug
появляется скомпилированный EXE файл, который и запускается, например, через Qt Creator
. Очень часто требуется, чтобы в папке с скомпилированным EXE файлом были какие-то служебные файлы: картинки, MP3 файлы, служебные директории и др.
У вас есть некоторый проект в среде Qt
. При компиляции проекта в соответствующей папке release
или debug
появляется скомпилированный EXE файл, который и запускается, например, через Qt Creator
. Очень часто требуется, чтобы в папке с скомпилированным EXE файлом были какие-то служебные файлы: картинки, MP3 файлы, служебные директории и др.