Qt - Аккуратное хранение проекта

Введение
При сборке проекта, особенно если это GUI-приложение, создаётся масса файлов:
- файлы
moc
-компилятора; - заголовочные файлы форм дизайнера;
- объектные файлы
- и прочие.
И если вы в какой-то момент захотите получить "чистые" исходники вашего проекта, без нагенерированного добра, вы столкнётесь с проблемой, как же отличить свои исходники от файлов компилятора, чтобы спокойно удалить последние и не тратить на них место при переносе, например.
Проект в Qt
может быть настроен на теневую сборку - тогда все генерируемые файлы хранятся отдельно, на уровень выше ваших исходников проекта. При этом создаются два каталога: под debug
сборку и под release
сборку. Однако, если вид каталогов, расползающихся по вашему жёсткому диску и приумножающих хаос на нём, преисполняет ваше сердце горечью, то эта статья для вас.
Как выглядит окно настройки сборки проекта на обычную (не теневую) сборку:

При такой настройке дополнительных каталогов вне директории вашего проекта создаваться не будет. Однако, в этом случае все генерируемые файлы посыплются прямо в директорию проекта и перемешаются с вашими исходниками. Но этот хаос управляемый. Этим файлам можно выделить свой каталог и хранить их там, о чём будет рассказано далее.
В то же время, есть ещё набор файлов. Они также складываются в каталог к вашему проекту и портят весь фэн-шуй. Это:
Makefile
;Makefile.Debug
;Makefile.Release
;object_script.ВАШ_ПРОЕКТ.Debug
;object_script.ВАШ_ПРОЕКТ.Release
;ВАШ_ПРОЕКТ.pro.user
.
Хаос из этих файлов неуправляемый. Они так и будут тут лежать и отравлять вам настроение. Ну да ладно, их можно будет удалить и вручную.
Редактирование файла проекта
Чтобы разделить ваши исходники и генерируемые, необходимо добавить следующие строки в .pro
-файл вашего проекта:
INCLUDEPATH += . \
MOC_DIR += generated/mocs # для файлов moc-компилятора
UI_DIR += generated/uis # для заголовочных файлов форм дизайнера
RCC_DIR += generated/rccs # для файлов ресурсов
OBJECTS_DIR += generated/objs # для объектных файлов
Теперь при сборке всё будет аккуратно раскладываться по соответствующим каталогам в директории generated
.