По итогам длительного времени работы со средой Qt Creator и подготовителем сборки QMAKE что хотелось бы рассказать начинающим программистам.
Главные заблуждения
include
Вы думаете, что include при наличии условия в pro файле не выполняется, точнее код не вставляется. Это ошибка и главная на наш взгляд недоработка в qmake.
include в любом случае вставляет из файла код. Как с этим бороться смотрите дальше.
переменные DEFINES, CONFIG и т.д.
Вы думаете, что они устанавливаются глобально и глобально действуют в каждом проекте и подпроектах в файлах pro,pri и т.д. И это ошибка. Переменные DEFINES,CONFIG для каждого проекта индивидуальны.
А как же эти переменные иногда все же действуют глобально? Смторите например как в исходниках самого Qt: ищите в подпроектах например include(../qbase.pri). Это и есть глобальное включением неких переменных.
Также обратите внимание на $$fromfile.
$$fromfile
Через $$fromfile устанавливать переменные для каждого проекта. $$fromfile ссылается на некий общий текстовый файл, где можно прописать эти свои переменные.
subdirs
Пользуйтесь subdirs и разделяйте проект на подпроекты (библиотеки и т.д.). Это правильное использование функционала qmake.
У subdirs есть один нюанс, связанный и регистром написания. Используйте TEMPLATE = subdirs и НЕ ИСПОЛЬЗУЙТЕ TEMPLATE = SUBDIRS. То есть только в нижнем регистре. Иначе у Qt Creator.
$$PWD
Одна из самых полезных переменных. Применяется конечно же в файле pro(pri) и она равна пути в файловой системе, где находится ваш файл pro(pri). Таким образом от вы всегда можете построить путь от своего файла pro(pri) внутрь от своего проекта или вне на более верхние уровни, где расположено что-то глобальное (общее).
Просто вы можете include делать любого файла из любого места в файловой системе, но используя в нем $$PWD вы гарантированно там будете ссылаться на файлы относительно его (pro/pri) расположения.
error , message
Прит изучении pro/pri файлов ставьте error, где что-то не понятно и qmake остановиться там, если этот участок кода будет выполняться. Также используйте message для вывода информации (переменных и т.д.)
Вы можете сделать свой вариант qmake
Помните, что qmake сам собирается в составе исходников Qt.