Как добавить пользовательские цели в сгенерированный qmake Makefile? - PullRequest
12 голосов
/ 23 сентября 2010

Сегодня, когда я играю с Qt, я использую qmake для генерации Makefile, и это работает довольно хорошо.

Однако иногда я хочу добавить больше материала в сгенерированный Makefile, без необходимости редактировать сгенерированный Makefile.

Допустим, у нас кроме исходного кода есть каталог Doxygen, и там мне нужно запустить несколько команд doxygen для генерации документации. Так что было бы неплохо иметь это в качестве цели в основном Makefile. Но по умолчанию qmake не понимает этот тип лишних вещей.

Так что я могу добавить что-нибудь, чтобы сказать qmake, чтобы включить вторичный Makefile в каталог "doxygen", или, может быть, добавить «дополнительные цели» непосредственно в конфигурацию qmake?

Спасибо Johan


Может быть, что-то вроде:

Ответы [ 4 ]

8 голосов
/ 25 марта 2011

Я работаю над этой же проблемой, и до сих пор я имел ограниченный успех, используя переменную QMAKE_EXTRA_TARGETS для создания цели документов следующим образом:

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 определены только в файлах отладки и выпуска, что заставляет меня явно делать make -f Makefile.Debug docs вместо более простого и интуитивно понятного make docs для создания документов.

Кто-нибудь когда-либо решал проблему с этой точки зрения QMAKE_EXTRA_TARGETS раньше?

8 голосов
/ 28 октября 2012

Это старый вопрос, но я все равно добавлю ответ.

Хотя в qmake, похоже, нет общей поддержки пользовательских правил, существует простой способ сделать это, предполагая GNU make. Просто создайте файл с именем makefile (все строчные):

include Makefile

re: clean
        $(MAKE) all

где последние две строки - мое пользовательское правило.

GNU make будет использовать makefile, а не Makefile, если оба существуют.

Кстати, правило решает проблему с "make -j8 clean all". Эта команда начнет делать все до того, как завершит очистку. Правила повторения гарантируют последовательность.

5 голосов
/ 17 ноября 2010

Как насчет недокументированных опций, упомянутых здесь http://paulf.free.fr/undocumented_qmake.html Под При добавлении цели кислорода можно найти следующее:

# 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

Может ли это быть решением?

0 голосов
/ 26 октября 2013

Этот пост в блоге Qt вполне определенно отвечает на вопрос QMAKE_EXTRA_COMPILERS и QMAKE_EXTRA_TARGETS.

Очень скоро мы познакомимся с QBS .. новым пакетом Qt Build Suite от Digia и сообщества Qt .. надеюсь, он действительно хорошо продуман (и задокументирован) .

...