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

如何为现有QMake项目添加单元测试且无需将源码迁移至子目录

有两种可行方案可以实现不迁移现有源码的前提下添加单元测试:

方案1:同目录使用subdirs模板,无需调整源码位置

该方案仅需重命名原有项目文件、新增subdirs主项目即可,完全不需要移动现有源码,和常规subdirs项目的兼容度最高,IDE识别效果好。

目录结构

myproject/
    myproject.pro   # 新建的subdirs类型主项目
    src.pro         # 原有项目文件直接重命名,和源码同目录
    <所有原有源码文件>
    test/
        test.pro
        <单元测试代码>

主项目配置(myproject.pro)

TEMPLATE = subdirs
SUBDIRS += \
    app \
    test

# 配置app子项目路径为当前根目录,使用重命名后的原有项目文件
app.subdirs = $$PWD
app.file = $$PWD/src.pro
# 保证主程序编译完成后再编译测试项目
test.depends = app

测试项目配置(test/test.pro)

QT += testlib
TEMPLATE = app
TARGET = unit_test
# 引入根目录的头文件
INCLUDEPATH += $$PWD/../
SOURCES += test_main.cpp utils_test.cpp
# 若主程序编译为静态/动态库,链接主程序产物即可调用内部逻辑
LIBS += -L$$OUT_PWD/../ -lmyproject

方案2:不使用subdirs模板,单项目多目标配置

如果不想新增项目文件,可以直接在原有.pro文件中添加条件编译分支,通过编译参数控制生成主程序还是测试程序,零目录结构改动。

原有项目文件配置示例

# 原有主程序配置完全保留
TEMPLATE = app
TARGET = myproject
SOURCES += main.cpp \
    utils.cpp
HEADERS += utils.h

# 新增单元测试条件分支
test {
    # 替换生成目标名
    TARGET = myproject_test
    # 移除主程序入口,添加测试代码
    SOURCES -= main.cpp
    SOURCES += test/test_main.cpp \
        test/utils_test.cpp
    # 引入测试依赖
    QT += testlib
    INCLUDEPATH += $$PWD
}

编译方式

  • 编译原有主程序:直接执行qmake && make即可,和原有逻辑完全一致
  • 编译单元测试:执行qmake "CONFIG+=test" && make,生成测试可执行文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:45:02