Как добавить пользовательские цели в созданный qmake Makefile?
Сегодня, когда я играю с Qt, я использую qmake для создания Makefile,
и это работает достаточно хорошо.
Однако иногда я хочу добавить больше материала в созданный Makefile,
без необходимости редактировать сгенерированный Makefile.
Скажем, что у нас рядом с исходным кодом есть каталог Doxygen,
и там мне нужно запустить некоторые команды doxygen для создания документации.
Поэтому было бы неплохо иметь это как цель в главном Makefile.
Но по умолчанию qmake не понимает этот тип дополнительных материалов.
Итак, могу ли я добавить что-то, чтобы сказать qmake включить вторичный Makefile в директорию doxygen,
или, возможно, добавить "дополнительные цели" непосредственно в конфигурацию qmake?
Спасибо
Johan
Может быть что-то вроде:
Ответы
Ответ 1
Я работаю над этой же проблемой, и до сих пор я имел ограниченный успех, используя переменную QMAKE_EXTRA_TARGETS, чтобы построить цель docs следующим образом:
docs.depends = $(SOURCES)
docs.commands = (cat Doxyfile; echo "INPUT = $?") | doxygen -
QMAKE_EXTRA_TARGETS += docs
где Doxyfile имеет базовые настройки конфигурации doxygen минус символ INPUT, который я добавляю с помощью 'echo', чтобы включать только неудовлетворенные зависимости Makefile в $(SOURCES).
Этот подход, похоже, работает в том, что он только воссоздает документацию для исходных файлов, которые изменились, что хорошо, но я столкнулся с другой проблемой в том, что мой проект проекта qmake построен с опцией debug_and_release CONFIG, чтобы он генерировал Makefile, Makefile. Debug и Makefile.Release, но SOURCES определены только в отладочной версии и выпуске Makefiles, заставляя меня явно делать make -f Makefile.Debug docs
вместо более простой и интуитивно понятной make docs
для создания документов.
Кто-нибудь когда-либо решал проблему с этой точки зрения QMAKE_EXTRA_TARGETS раньше?
Ответ 2
Это старый вопрос, но я все равно добавлю ответ.
Хотя, похоже, нет никакой общей поддержки пользовательских правил в qmake, есть простой способ сделать это, предполагая, что GNU make. Просто создайте файл под названием makefile (все строчные буквы):
include Makefile
re: clean
$(MAKE) all
где последние две строки являются моим пользовательским правилом.
GNU make будет использовать makefile, а не Makefile, если они существуют.
BTW, правило re решает проблему с "make -j8 clean all". Эта команда начнет делать все, прежде чем она закончит делать чистую. Правила re гарантируют последовательность.
Ответ 3
Как насчет недокументированных опций, упомянутых здесь http://paulf.free.fr/undocumented_qmake.html
В разделе Добавление целевой doxygen можно найти следующее:
# custom target 'doc' in *.pro file
dox.target = doc
dox.commands = doxygen Doxyfile; \
test -d doxydoc/html/images || mkdir doxydoc/html/images; \
cp documentation/images/* doxydoc/html/images
dox.depends =
...
# somewhere else in the *.pro file
QMAKE_EXTRA_UNIX_TARGETS += dox
Может ли это быть решением?
Ответ 4
Это сообщение в блоге Qt полностью отвечает на вопрос QMAKE_EXTRA_COMPILERS и QMAKE_EXTRA_TARGETS.
Скоро мы познакомимся с QBS.. новый Qt Build Suite, который приходит из Digia и сообщества Qt.. надеюсь, это действительно хорошо продуман (и хорошо документирован, если на то пошло).