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

如何在父CMakeLists.txt中排除子目录的单元测试执行

解决CMake子项目测试干扰父项目make test的问题

下面是几种可行的解决方案,按优先级推荐:

1. 用标准变量BUILD_TESTING控制子项目测试构建

CMake内置了标准变量BUILD_TESTING,常用于开关测试模块。如果子项目支持该变量(或你能修改子项目的CMakeLists.txt),可在父项目中添加如下配置:

# 引入子项目前临时关闭测试构建
set(BUILD_TESTING OFF CACHE BOOL "Build tests" FORCE)
add_subdirectory(subproject)
# 若父项目自身需要测试,重新开启
set(BUILD_TESTING ON CACHE BOOL "Build tests" FORCE)

如果子项目原本未判断BUILD_TESTING,可修改子项目的CMakeLists.txt,将测试相关代码包裹:

if(BUILD_TESTING)
    add_executable(subproject_test ...) # 测试可执行文件构建命令
    add_test(NAME sub-tests COMMAND subproject_test)
endif()

2. 直接移除子项目添加的测试条目

若无法修改子项目代码,可在父项目add_subdirectory后,调用remove_test删除子项目添加的测试:

add_subdirectory(subproject)
# 移除子项目的测试,NAME需与子项目add_test中的名称一致
remove_test(sub-tests)

此操作会将sub-tests从CTest的测试列表中移除,执行make test时不会尝试运行该测试,也就不会出现找不到可执行文件的错误。

3. 标记子项目测试目标为非默认构建

若仅不想编译测试可执行文件(但此方式下测试条目仍存在,执行make test仍会报错,仅作补充参考),可在父项目中设置测试目标的属性:

add_subdirectory(subproject)
# 假设子项目测试可执行文件目标为subproject_test
set_target_properties(subproject_test PROPERTIES EXCLUDE_FROM_ALL TRUE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:30:37