如何在qmake生成的Makefile中添加自定义目标?

问题描述 投票:12回答:4

我使用qmake生成Makefile,并且效果很好。但是,有时我想在生成的Makefile中添加更多内容,而不必编辑生成的Makefile。

假设我们在源代码旁边有一个Doxygen目录,在这里我需要运行一些doxygen命令来生成文档。因此,最好将它作为主Makefile中的目标。但是作为默认qmake,它不了解这种类型的额外内容。

所以我可以添加一些内容告诉qmake在“ doxygen”目录中包含辅助Makefile,或者直接在qmake配置中添加“额外目标”吗?


也许像:

makefile gnu-make qmake
4个回答
8
投票

我正在解决同一问题,到目前为止,使用QMAKE_EXTRA_TARGETS变量来构建docs目标的方法取得了有限的成功:

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

其中Doxyfile具有基本的doxygen配置设置减去我通过'echo'附加的INPUT符号,以仅将$(SOURCES)中不满意的Makefile依赖项包括在内。

此方法似乎起作用,因为它仅重新创建已更改的源文件的文档,这很好,但是我遇到了另一个问题,因为我的qmake项目文件是使用debug_and_release CONFIG选项构建的,因此它生成Makefile Makefile.Debug。和Makefile.Release,但SOURCES仅在调试和发布Makefile中定义,这迫使我显式地执行make -f Makefile.Debug docs而不是更简单直观的make docs来构建文档。

以前有没有人从这个QMAKE_EXTRA_TARGETS角度解决过这个问题?


8
投票

这是一个老问题,但是我还是要添加一个答案。

尽管qmake中似乎似乎不普遍支持自定义规则,但假设使用GNU make,有一种简单的方法。只需创建一个名为makefile的文件(全部小写):

include Makefile

re: clean
        $(MAKE) all

最后两行是我的自定义规则。

GNU make将使用makefile,而不是Makefile,如果两者都存在。

BTW,re规则使用“ make -j8 clean all”解决了问题。该命令将在完成清理之前开始执行所有操作。 re规则可确保顺序性。


5
投票

这里提到的未记录的选项呢?在添加脱氧靶标下可以找到以下内容:

http://paulf.free.fr/undocumented_qmake.html

这可以解决吗?


0
投票

# 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 非常明确地回答了QMAKE_EXTRA_COMPILERS和QMAKE_EXTRA_TARGETS的问题。

很快我们将被介绍到This Qt blog post ..来自Digia和Qt社区的新Qt Build Suite ..希望它真的经过深思熟虑(并为此得到了很好的记录)。

© www.soinside.com 2019 - 2024. All rights reserved.