clion 2026.1 起测试框架彻底脱离 cmake 绑定,支持 meson、bazel 等任意构建系统;通过二进制符号表分析自动识别 googletest/catch2 测试,无需构建系统配合,但需保留调试信息。

CLion 从 2026.1 版本起,测试框架已彻底脱离 CMake 绑定——这意味着无论你用 Meson、Bazel、自定义构建脚本,还是纯命令行编译,只要测试可执行文件能生成,CLion 就能识别并运行它。
Google Test 在 CLion 中不显示测试函数?检查 gtest_discover_tests 是否被绕过
旧版 CMake 项目常依赖 gtest_discover_tests 自动注册测试用例,但该函数仅在 CMake ≥ 3.10 且启用 ENABLE_TESTING() 后才生效。若你手动调用 add_executable 并链接 gtest,但没调用 gtest_discover_tests,CLion 就无法解析出 TEST 或 TEST_F 定义的用例。
- 确保 CMakeLists.txt 中有
enable_testing()(不是可选,是必须) - 在
add_executable(my_test ...)后立即加gtest_discover_tests(my_test) - 若使用
find_package(GTest REQUIRED),注意它不自动启用测试发现,仍需显式调用gtest_discover_tests - Meson 用户可跳过这步:CLion 2026+ 支持直接扫描二进制符号表提取测试,无需构建系统配合
Catch2 测试在 CLion 里报 “No test executables found”
这个错误通常不是 Catch2 本身的问题,而是 CLion 没找到带 CATCH_MAIN 入口的可执行文件,或该文件未被标记为“test target”。
- 确认你的测试可执行文件名含
test、spec、check等关键词(CLion 默认按文件名启发式识别) - 若命名合规但仍失败,右键该可执行文件 → Mark as Test Executable(此操作会写入
.idea/misc.xml) - Catch2 v3 要求入口函数为
int main(int argc, char *argv[]),不能是int main();否则链接后可能无符号导出,CLion 扫描失败 - 避免在
main()中直接调用Catch::Session().run()—— 这会让 CLion 误判为普通程序
非 CMake 项目(如 Meson)如何让 CLion 识别 GoogleTest
Meson 本身不提供测试元数据给 IDE,但 CLion 2026+ 引入了基于二进制分析的测试发现机制,不再依赖构建系统输出。
- 先确保测试可执行文件已成功构建(例如通过
meson compile -C build test_myapp) - 在 CLion 中打开项目根目录,进入 Run → Edit Configurations… → + → Template → Google Test
- 在
Test kind中选Executable path,然后填入绝对路径,如./build/test_myapp - 勾选
Use custom working directory并设为./build(避免因相对路径导致测试读取资源失败) - 关键点:首次运行时 CLion 会尝试解析该二进制的符号表,若提示“symbol not found”,说明编译时未保留调试信息——请确认 Meson 的
buildtype是debug或debugoptimized
最易被忽略的是调试信息与符号可见性:CLion 的测试发现依赖 DWARF 或 COFF 符号,而非源码文本扫描。哪怕你写了 100 个 TEST,如果编译时用了 -s(strip)或 buildtype=plain,CLion 就什么也看不到。











