首页 文章

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

提问于
浏览
12

今天当我玩Qt时,我使用qmake生成Makefile,这非常有效 .

但有时我想在生成的Makefile中添加更多内容,而不必编辑生成的Makefile .

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

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

谢谢约翰


也许是这样的:

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强制我明确地执行 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 .

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

  • 0

    那里提到的未记载的选项如何http://paulf.free.fr/undocumented_qmake.htmlAdding a doxygen target 下可以找到以下内容:

    # 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
    

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

  • 5

    This Qt blog post非常肯定地回答了QMAKE_EXTRA_COMPILERS和QMAKE_EXTRA_TARGETS的问题 .

    我们很快就会介绍来自Digia和Qt社区的新Qt Build Suite ..希望它经过深思熟虑(并且有很好的文档记录) .

相关问题