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

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
  • 编译项目: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并链接:

  1. 下载GoogleTest v1.13.0源码并解压
  2. 进入解压目录,用对应工具链编译:
    • 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
  3. 在主项目CMakeLists.txt中添加:
    set(GTEST_ROOT "path/to/gtest/build" CACHE PATH "")
    find_package(GTest REQUIRED)
    
    替换path/to/gtest/build为实际编译后的GTest目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:16:10