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

为何安装项目时默认安装Googletest目标?如何阻止并正常构建测试?

问题原因
  1. Googletest官方CMake脚本默认开启自身安装逻辑,由INSTALL_GTEST和INSTALL_GMOCK两个缓存变量控制。只要这两个变量为ON,执行cmake --install时就会自动安装gtest、gmock等Googletest自身目标。
  2. add_subdirectory(tests EXCLUDE_FROM_ALL)仅控制tests目录下的目标是否加入默认构建的ALL目标,无法影响Googletest自身的安装规则。只要Googletest的CMake脚本被执行(比如构建测试目标时会触发),其安装规则就会被注册,最终执行cmake --install时仍会安装Googletest。
解决办法

方法一:禁用Googletest的安装开关

在引入Googletest之前,设置INSTALL_GTEST和INSTALL_GMOCK为OFF,让Googletest的CMake脚本不生成自身的安装规则。

  • 若在根CMakeLists.txt中添加tests子目录,先设置变量再执行add_subdirectory:
# 禁用Googletest自身的安装
set(INSTALL_GTEST OFF CACHE BOOL "")
set(INSTALL_GMOCK OFF CACHE BOOL "")
add_subdirectory(tests)
  • 若在tests目录内引入Googletest(比如通过add_subdirectory(googletest)),则在该操作前设置变量:
# tests/CMakeLists.txt
set(INSTALL_GTEST OFF CACHE BOOL "")
set(INSTALL_GMOCK OFF CACHE BOOL "")
add_subdirectory(googletest)

# 配置你的测试可执行目标
add_executable(AllTests test_code.cpp)
target_link_libraries(AllTests gtest_main)

此方式下,cmake --build build会默认构建测试,cmake --install build时不会安装Googletest目标。

方法二:用FetchContent引入Googletest并控制安装

如果通过FetchContent拉取Googletest,直接在配置阶段禁用安装:

include(FetchContent)
FetchContent_Declare(
  googletest
  URL https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip
)
# 禁用Googletest自身安装
set(INSTALL_GTEST OFF)
set(INSTALL_GMOCK OFF)
FetchContent_MakeAvailable(googletest)

# 配置测试目标
add_executable(AllTests test_code.cpp)
target_link_libraries(AllTests gtest_main)

这种方式无需手动管理Googletest源码,同时能彻底阻止其被安装。

额外说明:默认不构建测试的场景

如果希望测试目标默认不构建,仅在指定时才构建,可结合EXCLUDE_FROM_ALL和上述禁用安装的设置:

# 根CMakeLists.txt
set(INSTALL_GTEST OFF CACHE BOOL "")
set(INSTALL_GMOCK OFF CACHE BOOL "")
add_subdirectory(tests EXCLUDE_FROM_ALL)

# 可选:给测试目标设置便捷触发目标
add_custom_target(run_tests)
add_dependencies(run_tests AllTests)

此时执行cmake --build build不会构建测试,执行cmake --build build --target run_tests(或直接指定AllTests)可构建测试,且安装时不会包含Googletest目标。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:43:37