Qmake и Rebuild all
Объясните пожалуйста, как работают эти кнопки в Qtcreator'e.
Прочитал в нескольких гайдах, что qmake выполняет pro файлы. Это файлы, в которых описано, как собирать проект в рабочую программу (грубо говоря). Про Rebuild all вообще нигде не видел инфы.
Много раз тестил у себя на компе, и выяснил, что Rebuild All выполняет всё, что написано в pro файлах, кроме функций. А qmake выполняет только функции. Я правильно всё понял или это зависит от каких-то настроек? Можно ли настроить так, чтобы выполнять оба действия одной кнопкой?
Что точно делает каждая из кнопок? В интернете информация об этом размытая, такая, как будто это все знают, и оно само собой разумеется.
Пример: В проекте есть файл iss_generator.pri. Он подключен в pro файл следующим образом.
include(iss_generator.pri)
Вот код этого файла.
iss_file = $$DeployDir/install.iss
iss ="Здесь большой текст этого файла"
write_file($$iss_file, iss)
Файл появляется в папке только при qmake. При build не появляется.
Ответы (1 шт):
Система сборки, основанная на qmake - двухфазная.
- Фаза генерации сборочных скриптов (проектов). За эту фазу отвечает (или можно запустить) пункт меню
Build -> Run qmake. Либо, если билд-скрипты еще не разу не создавались, то эта фаза запускается автоматически. Соответственно, если у вас уже есть билд-директория, то при изменении.pro/.priфайлов, вы должны сами вызыватьBuild -> Run qmake. - Фаза сборки проектов. Это либо
Build All(инкрементальная сборка), либоRebuild All.
Для автоматической генерации билд-скриптов можно сделать такой хак:
QMAKE_EXTRA_TARGETS += after_build firsthook
firsthook.target = first
firsthook.depends = after_build
after_build.depends = all
after_build.CONFIG = phony
after_build.commands = $(DEL_FILE) $(MAKEFILE)
Т.е. после каждой сборки будет удаляться билд-скрипт, и Qt Creator будет сам запускать qmake при каждом Build All.
Также, посмотрите хороший гайд по qmake.
Update
Если есть какие-то цели (target) выполняемые после сборки всего, то их надо добавить в зависимости after_build.depend
after_build.depend = all <список всех целей выполняемых после сборки>
чтобы цель after_build была самой последней выполняемой командой.