2010-09-23 5 views
12

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

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

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

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

Благодаря Йохан


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

ответ

5

Что о недокументированных вариантов, упомянутых здесь 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 

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

8

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

docs.depends = $(SOURCES) 
docs.commands = (cat Doxyfile; echo "INPUT = $?") | doxygen - 
QMAKE_EXTRA_TARGETS += docs 

где Doxyfile имеет основные настройки Doxygen конфигурации минус входной символ, который Я добавляю через «echo», чтобы включить только неудовлетворенные зависимости Makefile в $ (SOURCES).

Этот подход, похоже, работает в том, что он только воссоздает документацию для исходных файлов, которые изменились, что хорошо, но я столкнулся с другой проблемой в том, что мой проект проекта qmake построен с опцией debug_and_release CONFIG, чтобы он генерировал Makefile, Makefile .Debug и Makefile.Release, но ИСТОЧНИКИ определены только в отладочном и релизном Makefiles, заставляющем меня явно делать make -f Makefile.Debug docs вместо более простого и интуитивного make docs для создания документов.

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

8

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

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

где две последние строки - это мое обычное правило.

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

BTW, правило re решает проблему с «make -j8 clean all». Эта команда начнет делать все, прежде чем она закончит делать чистую. Правила re гарантируют последовательность.

+1

+1 приятное обходное решение – Johan

0

This Qt blog post полностью отвечает на вопрос QMAKE_EXTRA_COMPILERS и QMAKE_EXTRA_TARGETS.

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