Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add custom targets in a qmake generated Makefile?

I use qmake to generate the Makefile, and that works well. However, sometimes I want to add more stuff to the generated Makefile without having to edit the generated Makefile.

Let's say that we beside the source code have a Doxygen directory, and there I need to run some doxygen commands to generate the documentation. So it would be nice to have this as a target in the main Makefile. But as default qmake do not understand this type of extra stuff.

So can I add something to tell qmake to include a secondary Makefile in the "doxygen" dir, or maybe add "extra targets" directly in the qmake config?


Maybe something like:

  • http://doc.qt.digia.com/4.6/qmake-environment-reference.html#customizing-makefile-output
like image 225
Johan Avatar asked Sep 23 '10 08:09

Johan


2 Answers

I am working this same issue and so far I have had limited success using the QMAKE_EXTRA_TARGETS variable to build the docs target like so:

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

where Doxyfile has the basic doxygen config settings minus the INPUT symbol which I am appending via 'echo' to include only the unsatisfied Makefile dependencies in $(SOURCES).

This approach seems to work in that it only recreates documentation for source files that have changed which is good but I have encountered another problem in that my qmake project file is built with the debug_and_release CONFIG option so that it generates Makefile, Makefile.Debug, and Makefile.Release but SOURCES are only defined in the debug and release Makefiles forcing me to explicitly do a make -f Makefile.Debug docs instead of the more simple and intuitive make docs to build the docs.

Anybody ever tackled the problem from this QMAKE_EXTRA_TARGETS perspective before?

like image 171
Travis Avatar answered Oct 18 '22 21:10

Travis


This is an old question, but I'll add an answer anyway.

While there seems to be no general support for custom rules in qmake, there is a simple way to do it, assuming GNU make. Just create a file called makefile (all lower case):

include Makefile

re: clean
        $(MAKE) all

where the last two lines are my custom rule.

GNU make will use makefile, not Makefile, if both exist.

BTW, the re rule solves the problem with "make -j8 clean all". This command will start doing all before it has finished doing clean. The re rules guarantees sequentiality.

like image 38
Northern Stream Avatar answered Oct 18 '22 20:10

Northern Stream