Как добавить пользовательские цели в созданный 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.. надеюсь, это действительно хорошо продуман (и хорошо документирован, если на то пошло).