You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过单条CLI命令构建并运行Qt应用及单元测试程序

解决方案

要实现通过CONFIG+=tests参数可选构建主应用和测试程序,核心是解决TEMPLATE不能同时为app和subdirs的冲突,推荐采用分层subdirs项目结构,具体步骤如下:

1. 调整项目目录结构

将主应用代码独立到src子目录,让根目录的MyApp.pro作为项目入口,结构如下:

MyApp/
├── MyApp.pro       # 顶层subdirs项目文件
├── src/
│   ├── src.pro     # 主应用项目文件(原MyApp.pro内容迁移至此)
│   └── ...         # 主应用源码文件
└── test/
    ├── test.pro    # 测试程序项目文件
    └── ...         # 测试源码文件

2. 配置顶层MyApp.pro

将顶层文件设为subdirs模板,通过CONFIG变量动态控制是否包含测试子项目:

TEMPLATE = subdirs

# 默认仅构建主应用
SUBDIRS += src

# 当传入CONFIG+=tests时,添加测试子项目,并确保测试在主应用之后构建
tests {
    SUBDIRS += test
    test.depends = src
}

3. 配置主应用src.pro

将原MyApp.pro中的主应用配置迁移到src/src.pro,保持app模板:

TEMPLATE = app
TARGET = MyApp

# 主应用的源码、头文件、依赖等配置
SOURCES += main.cpp your_app_code.cpp
HEADERS += your_app_header.h
# 其他配置(如LIBS、INCLUDEPATH等)按需添加

4. 配置测试程序test.pro

保持test.pro的app模板,按需添加对主应用的依赖(如头文件路径):

TEMPLATE = app
TARGET = MyAppTest

# 引入主应用的头文件目录
INCLUDEPATH += ../src

# 测试程序的源码配置
SOURCES += test_main.cpp your_test_code.cpp
HEADERS += your_test_header.h
# 如果主应用是库而非可执行,需链接主应用库:
# LIBS += -L../src -lMyApp

使用方法

  • 仅构建主应用:
    qmake .. && make -j4
    
  • 同时构建主应用和测试程序:
    qmake .. CONFIG+=tests && make -j4
    

替代方案(不拆分目录)

如果不想调整目录结构,可通过qmake内部变量SUBDIRS_MODE判断当前项目是否作为subdirs子项目,实现单文件条件配置:

!SUBDIRS_MODE {
    # 作为顶层项目时,根据CONFIG选择模板
    !tests {
        TEMPLATE = app
        TARGET = MyApp
        SOURCES += main.cpp your_app_code.cpp
        HEADERS += your_app_header.h
    } else {
        TEMPLATE = subdirs
        SUBDIRS += . test
        test.depends = .
    }
} else {
    # 作为subdirs子项目时,强制构建主应用
    TEMPLATE = app
    TARGET = MyApp
    SOURCES += main.cpp your_app_code.cpp
    HEADERS += your_app_header.h
}

不过这种方式不如分层结构清晰,长期维护推荐使用第一种方案。

内容的提问来源于stack exchange,提问作者mhhabib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:46:04