Harrix Блог

  • Списки статей
    • Все статьи
    • IT
    • Qt
    • C++
    • Сложение двух чисел
    • Web программированиe
    • FAQ
    • Latex
    • Установка программ
    • Мифы
    • Видео
    • Про фото
  • Проекты
  • Harrix.org
  • RSS
  • Контакты

Копирование файлов в build папку при компиляции проекта в Qt

Небольшой совет для автоматизации процесса копирования нужных файлов в Qt из папки проекта в папку с скомпилированным проектом.

15.12.2016 1 Comment 5 126 просмотров

У вас есть некоторый проект в среде 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 добавим следующие строки:

1
2
3
4
5
6
7
8
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 тоже надо будет повторить.


Статьи по теме:

  1. Как сослаться на элемент в папке с программой в QtQuick 2.0
  2. Установка Qt 4.8.4 на Windows XP
  3. Как сохранить данные из QTextEdit в ODF
  4. Установка Qt под Android

IT qmake, Qt

© 2014 Harrix