gpt4 book ai didi

c++ - QMake 'subdirs' 模板 - 执行目标?

转载 作者:可可西里 更新时间:2023-11-01 15:11:15 26 4
gpt4 key购买 nike

我正在使用一个使用“subdirs”模板的 qmake .pro 文件为我的 Qt 应用程序构建一个构建系统。这工作正常,并允许我指定构建每个目标的顺序,因此依赖项工作得很好。但是,我现在已经向项目添加了一个工具,该工具生成一个版本号(包含构建日期、SVN 修订版等),供主应用程序使用——我可以先构建这个版本工具,但当它构建时我想要在构建更多目标之前执行它(它生成一个头文件,其中包含主应用程序包含的版本号。)

例如,我的简单 qmake 文件看起来像这样:

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

构建“版本”时,我想在构建“lib”之前执行它(在命令行上传递一些参数)。

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

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

我知道 qmake 是为生成 makefile 而设计的,所以我在这里可能希望有点过分,但如果有人能给我一些指示,我将非常欢迎。

最佳答案

我目前使用 qmake 来自动执行我的单元测试已有两年 - 并且运行良好。

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

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 目标 QMAKE_POST_LINK 将在链接后运行用户定义的命令。

tests.pri(普通文件)

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

tests.pro(项目特定文件)

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

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

main.cpp

#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);
}

这会在每个构建上运行您的测试,并在发现错误时中止。

注意事项

如果您遇到诸如“LNK2005: xxx already defined...”之类的链接器错误,请为每个测试类 header 添加一个新的 .cpp 文件并移动一些测试方法实现。


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

如果您有任何其他问题,请随时问我。

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

关于c++ - QMake 'subdirs' 模板 - 执行目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1167573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com