У вас есть некоторый проект в среде 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 тоже надо будет повторить.