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

使用CMake编译含doctest.h的项目出现链接错误,手动编译正常如何解决

问题解决方法

错误原因

你编写的CMakeLists.txt中add_executable指令语法不符合规范:
CMake的add_executable要求第一个参数为生成的可执行目标名称,后续参数才是参与编译的源文件列表。你当前的写法将doctest_main.cpp识别为了可执行文件名,实际仅tests.cpp参与了编译:

  • 包含main函数和doctest完整实现的doctest_main.cpp没有参与编译,因此链接阶段既找不到main函数入口,也找不到doctest相关的函数实现,就会出现你遇到的未定义引用报错。

修复方案

将project/CMakeLists.txt中的add_executable部分修改为正确写法即可,示例如下:

cmake_minimum_required(VERSION 3.16)
project(project)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON) # 可选配置,强制要求编译器支持C++17

add_compile_options(-Wall -Wextra -Werror)

# 第一个参数为生成的可执行文件名,后面跟所有需要编译的源文件
add_executable(unit_test doctest_main.cpp tests.cpp)

验证步骤

  1. 清空之前生成的错误构建缓存:删除整个build目录
  2. 重新执行构建流程:
project> mkdir build && cd build
project/build> cmake ..
project/build> cmake --build .
  1. 运行生成的测试可执行文件:
project/build> ./unit_test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:54:04