代码之家  ›  专栏  ›  技术社区  ›  Rob

QMake“subdirs”模板-执行目标?

  •  11
  • Rob  · 技术社区  · 15 年前

    TEMPLATE = subdirs
    CONFIG += ordered
    SUBDIRS = version \
              lib \
              tests \
              mainapp
    

    有人知道这是否可能吗?我看到qmake有一个可以执行应用程序的“系统”命令,但我不知道如何利用它。

    一个相关的问题与我的单元测试有关。它们存在于“测试”项目中,并使用QTest框架。我想在生成“mainapp”之前执行tests exe,如果测试失败(即tests exe不返回零),我想退出生成过程。

    我意识到qmake是为了生成makefile而设计的,所以我可能希望这里有点太多,但如果有人能给我一些建议,那将是非常受欢迎的。

    4 回复  |  直到 15 年前
        1
  •  10
  •   kaveish    8 年前

    看看这里-我为此制作了一个迷你howto:

    Qt: Automated Unit Tests with QMAKE

    摘要摘要摘要:


    结构

    /myproject/
        myproject.h
        myproject.cpp
        main.cpp
        myproject.pro
    /myproject/tests/
        MyUnitTest.h
        MyUnitTest.cpp
        main.cpp
        tests.pro
    

    使用QMake在生成上自动运行单元测试

    QMake target QMake_POST_链接将在链接后运行用户定义的命令。

    tests.pri(公共文件)

    TEMPLATE = app
    DEPENDPATH += . ../
    INCLUDEPATH += . ../
    DESTDIR = ./
    CONFIG += qtestlib
    unix:QMAKE_POST_LINK=./$$TARGET
    win32:QMAKE_POST_LINK=$${TARGET}.exe
    

    TARGET = MyUnitTest
    HEADERS += MyUnitTest.h
    SOURCES += MyUnitTest.cpp main.cpp
    include(tests.pri)
    

    在单个main()中运行多个单元测试

    #include "MyUnitTest1.h"
    #include "MyUnitTest2.h"
    
    int main(int argc, char** argv) {
        QApplication app(argc, argv);
    
        int retval(0);
        retval +=QTest::qExec(&MyTest1(), argc, argv);
        retval +=QTest::qExec(&MyTest2(), argc, argv);
    
        return (retval ? 1 : 0);
    }
    

    这将在每个生成上运行测试,如果发现错误,将中止测试。


    您可以在编译/构建之后使用这种机制来执行版本控制工具-因此您的问题应该得到解决:-)

    PS:在这里你可以找到更多关于QMake的(未记录的)技巧: Undocumented QMake

        2
  •  3
  •   Rob    15 年前

    我在Qt兴趣邮件列表上发布了一条关于“预构建”步骤的消息,可以使用pre_TARGETDEPS和QMAKE_EXTRA_目标的组合来完成。以下是答复:

    您可以指定自定义生成步骤, 每次创建myversion.cpp的步骤 在它构建某些东西之前:

    versiontarget.target = myversion.cpp
    versiontarget.commands = ./makemyversion.sh
    versiontarget.depends = FORCE
    
    PRE_TARGETDEPS += myversion.cpp
    QMAKE_EXTRA_TARGETS += versiontarget
    

    我现在使用类似的东西来生成我的应用程序的版本号。

        3
  •  0
  •   mxcl    15 年前

    多年来,我一直尝试将qmake作为构建系统来使用。最后,我只是采取了一个预先准备的步骤。即,一个配置脚本。

    您可以在其中构建版本工具,然后在调用qmake生成makefile之前执行它。

        4
  •  0
  •   Community CDub    8 年前

    3DH 说到这里,你想要一个 QMAKE_POST_LINK version.pro

    TEMPLATE = app
    TARGET = version
    HEADERS = version.h
    SOURCES = version.cpp
    QMAKE_POST_LINK=./version