Для решения этой проблемы я нарисовал себе следующий скрипт, который удобнее всего поместить в свою собственную фичу. Подробно объяснить происходящее здесь я не могу, объем будет на не толстую, но книгу. Кому интересно — добро пожаловать в мой блог, я там о qmake написал все, что знаю.
# функция, в которой происходит вся работа defineReplace(checkDefinesForChanges) { old_def = $$cat($$OUT_PWD/defines.txt) curr_def = $$DEFINES curr_def -= $$old_def old_def -= $$DEFINES diff = $$old_def $$curr_def # если макросы поменялись, то удаляем все файлы в OUT_PWD !isEmpty(diff) { A = $$system(del /F /Q /S $$system_path($${OUT_PWD}/*.*)) message(DEFINES WERE CHANGED) } write_file($$OUT_PWD/defines.txt, DEFINES); return(???) } # нагибаем QMAKE_EXTRA_COMPILERS, чтобы запустить # checkDefinesForChanges после всех фич _defines_check_ = ??? defines_check.name = check on defines being changed defines_check.input = _defines_check_ defines_check.CONFIG += no_link ignore_no_exist defines_check.depends = ??? defines_check.commands = ??? defines_check.output_function = checkDefinesForChanges QMAKE_EXTRA_COMPILERS += defines_check # цели в Makefile, чтобы при удалении defines.txt запускался qmake recompile_on_defines_txt_not_existsing.target = $(MAKEFILE) recompile_on_defines_txt_not_existsing.depends = $$OUT_PWD/defines.txt recompile_on_defines_txt_not_existsing2.target = $$OUT_PWD/defines.txt recompile_on_defines_txt_not_existsing2.depends = qmake QMAKE_EXTRA_TARGETS += recompile_on_defines_txt_not_existsing recompile_on_defines_txt_not_existsing2
Суть происходящего: я нагибаю QMAKE_EXTRA_COMPILERS, чтобы вызвать свою функцию после обработки всех фич. Тем самым я могу получить финальное значение переменной DEFINES, которое использую для того, чтобы определить факт смены макросов. Если изменение было — удаляю все файлы в OUT_PWD (команда для Windows, под Linux поменяйте на что нужно).
В качестве полезного иногда бонуса, в файле defines.txt всегда можно посмотреть макросы, с которыми компилировался проект.
ссылка на оригинал статьи http://habrahabr.ru/post/182518/
Добавить комментарий