Windows终端编译含GoogleTest的CLion CMake项目失败求助
Windows终端编译含GoogleTest的CMake项目失败解决方案
问题概述
CLion中可正常构建包含GoogleTest的CMake项目,但Windows 11 x64终端编译时GoogleTest依赖出现大量错误;单独编译不含GoogleTest的项目终端可正常运行。复制CLion构建输出的命令执行仍报错,使用CLion内置工具链时终端无法编译测试程序,核心需求是实现终端正常编译该项目。
现有CMake配置
主目录CMakeLists.txt
cmake_minimum_required (VERSION 3.8) set(CMAKE_VERBOSE_MAKEFILE ON) set(COMMON_PROJECT_CPP_STANDARD 20 ON CACHE BOOL "" FORCE) set(CMAKE_CXX_STANDARD 20) include(FetchContent) FetchContent_Declare( googletest URL https://github.com/google/googletest/archive/refs/tags/v1.13.0.zip DOWNLOAD_EXTRACT_TIMESTAMP ON ) set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) FetchContent_MakeAvailable(googletest) project ("DataStructuresAndAlgorithms") enable_testing() add_subdirectory ("src/BubbleSort")
BubbleSort目录CMakeLists.txt
project("BubbleSort") add_executable( ${PROJECT_NAME} "bubblesort.test.cpp" "bubblesort.h" ) if (CMAKE_VERSION VERSION_GREATER 3.12) set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD ${COMMON_PROJECT_CPP_STANDARD}) endif() # GoogleTest requires at least C++14 target_link_libraries( ${PROJECT_NAME} GTest::gtest_main ) include(GoogleTest) gtest_discover_tests(${PROJECT_NAME})
解决方案步骤
1. 统一终端与CLion使用的工具链
终端编译失败的核心原因通常是工具链环境不匹配,CLion使用的编译器(如MSVC、MinGW、Clang)在终端中未正确配置:
- 若CLion使用MSVC:
打开对应版本的「Developer Command Prompt for Visual Studio」(比如VS2022的x64命令提示符),再进入项目目录执行构建命令。 - 若CLion使用MinGW:
将MinGW的bin目录(比如C:\mingw64\bin)添加到系统环境变量PATH最前端,然后重启终端,执行g++ --version确认编译器可调用。
2. 清理CMake缓存并重新生成
旧缓存可能导致工具链冲突,执行以下步骤:
- 删除项目下的
build目录 - 重新运行CMake生成命令(根据工具链选择):
- MSVC:
cmake -G "Visual Studio 17 2022" -A x64 -S . -B build - MinGW:
cmake -G "MinGW Makefiles" -S . -B build
- MSVC:
- 编译项目:
cmake --build build --config Release
3. 优化CMake配置(可选)
对现有CMakeLists.txt做以下调整,避免编译标准和CRT冲突:
- 主目录CMakeLists.txt中,将
COMMON_PROJECT_CPP_STANDARD的定义修正为纯数值(原配置误加了ON):set(COMMON_PROJECT_CPP_STANDARD 20 CACHE STRING "" FORCE) - 确保GTest的CRT设置与主项目一致,保留
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
4. 手动编译GoogleTest(若FetchContent失败)
如果FetchContent方式仍报错,可手动编译GTest并链接:
- 下载GoogleTest v1.13.0源码并解压
- 进入解压目录,用对应工具链编译:
- MSVC:打开Developer Command Prompt,执行
cmake -G "Visual Studio 17 2022" -A x64 -S . -B build && cmake --build build --config Release - MinGW:执行
cmake -G "MinGW Makefiles" -S . -B build && cmake --build build
- MSVC:打开Developer Command Prompt,执行
- 在主项目CMakeLists.txt中添加:
替换set(GTEST_ROOT "path/to/gtest/build" CACHE PATH "") find_package(GTest REQUIRED)path/to/gtest/build为实际编译后的GTest目录
内容的提问来源于stack exchange,提问作者Lesnov
相关产品推荐
相关产品推荐

