12

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

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

那么我可以添加一些东西来告诉 qmake 在“doxygen”目录中包含一个辅助 Makefile,或者直接在 qmake 配置中添加“额外目标”吗?


也许是这样的:

4

4 回答 4

8

我正在解决同样的问题,到目前为止,我使用 QMAKE_EXTRA_TARGETS 变量构建文档目标的成功有限,如下所示:

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

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

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

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

于 2011-03-25T15:08:04.777 回答
8

这是一个老问题,但无论如何我都会添加一个答案。

虽然在 qmake 中似乎没有对自定义规则的一般支持,但有一种简单的方法可以做到这一点,假设 GNU make。只需创建一个名为 makefile 的文件(全部小写):

include Makefile

re: clean
        $(MAKE) all

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

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

顺便说一句,re 规则解决了“make -j8 clean all”的问题。此命令将在完成清理之前开始执行所有操作。re 规则保证了顺序性。

于 2012-10-28T19:02:02.853 回答
6

这里提到的未记录选项怎么样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

这可能是一个解决方案吗?

于 2010-11-16T22:14:29.177 回答
0

这篇 Qt 博客文章非常明确地回答了 QMAKE_EXTRA_COMPILERS 和 QMAKE_EXTRA_TARGETS 的问题。

很快我们将被介绍给QBS .. 来自 Digia 和 Qt 社区的新 Qt Build Suite .. 希望它是经过深思熟虑的(就此而言,它是有据可查的)。

于 2013-10-26T00:03:11.190 回答