clion创建google test项目可自动拉取链接gtest,只需在cmakelists.txt中正确配置add_subdirectory(googletest)、include_directories和target_link_libraries(顺序必须在add_executable之后),并避免重复定义main函数。

CLion 创建 Google Test 项目不需要手动下载、编译、拷贝头文件和静态库——只要 CMakeLists.txt 配置得当,CLion 能自动拉取并链接 gtest,且支持一键运行/调试单个测试用例。
用 add_subdirectory 直接集成 googletest 源码
这是最可控、兼容性最好、且 CLion 原生支持的方式。把 googletest 当作子项目嵌入,CMake 自动构建其目标(gtest、gtest_main),无需预编译或管理 .a/.so 文件路径。
- 在项目根目录下新建
googletest文件夹,用git clone https://github.com/google/googletest.git下载(推荐 v1.13.0 或最新 release) - 确保
CMakeLists.txt中有这三行(顺序不能错):add_subdirectory(googletest) include_directories(googletest/googletest/include googletest/googlemock/include) target_link_libraries(your_test_executable gtest gtest_main)
-
your_test_executable必须是add_executable定义的可执行目标名,不是源文件名 - 如果遇到
CMake Error: The source directory ".../googletest" does not contain a CMakeLists.txt,说明你 clone 的路径不对——应直接 clone 到googletest/目录下,而不是把整个仓库重命名或解压进子文件夹
target_link_libraries 必须放在 add_executable 之后
这是新手最常踩的坑:CMake 不允许在定义目标前就链接库。错误写法会导致 target_link_libraries 无效,最终链接失败(undefined reference to 'main' 或 RUN_ALL_TESTS 找不到)。
- 正确顺序:
add_executable(mytest test.cpp src.cpp) target_link_libraries(mytest gtest gtest_main)
- 如果还用了
gmock,要额外加gmock gmock_main,且需确保add_subdirectory也包含了googlemock - 不要写成
target_link_libraries(mytest ${GTEST_LIBRARIES})——现代 googletest 已弃用该变量,直接写目标名即可
测试入口必须调用 RUN_ALL_TESTS(),且 main 不能重复定义
CLion 自动生成的测试可执行文件里,gtest_main 库已提供默认 main 函数。如果你自己写 int main(int argc, char** argv) 并调用 testing::InitGoogleTest(&argc, argv); RUN_ALL_TESTS();,就会和 gtest_main 冲突,导致链接时报 multiple definition of 'main'。
- 两种安全做法二选一:
– 不写main,只写TEST或TEST_F,靠gtest_main启动
– 不链接gtest_main,只链gtest,然后自己实现main -
TEST宏定义的测试必须在全局作用域,不能包在命名空间或函数内,否则 CLion 测试面板无法识别 - 若使用
TEST_F,对应的 fixture 类必须公有继承testing::Test,且不能带参数构造函数
真正麻烦的从来不是“怎么让测试跑起来”,而是当 CLion 测试面板里不显示任何测试、或者点击绿色三角形没反应时,你得快速判断:是 add_subdirectory 路径错了?target_link_libraries 顺序错了?还是你自己多写了一个 main?这些点不验证清楚,光刷新 CMake 或重启 IDE 没用。











