如何通过单条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
相关产品推荐
相关产品推荐

