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

如何从CMake子目录链接父项目库?链接报错求助

问题原因与修复方案

核心问题:根目录CMakeLists.txt的源文件路径错误

根目录的add_library指令里直接写了B1.cpp和B1.h,但这些文件实际位于src子目录下,CMake无法找到这些源文件,导致生成的库文件是空的,测试程序链接时自然会出现未定义引用错误。

修复步骤

1. 修正根目录CMakeLists.txt

调整源文件路径,确保CMake能正确找到src下的文件:

# PROJECT_ROOT CMakeLists.txt
cmake_minimum_required(VERSION 3.22)
project(project_root)

# 正确指定src目录下的源文件路径
add_library(${PROJECT_NAME}
    src/B1.cpp
    src/B1.h
)

target_include_directories(${PROJECT_NAME} PUBLIC
    ${CMAKE_SOURCE_DIR}/src
)

add_subdirectory(test)

2. 优化测试目录CMakeLists.txt(可选)

子目录无需重新声明project(test),直接构建可执行程序即可,原有链接逻辑是正确的:

# test/CMakeLists.txt
cmake_minimum_required(VERSION 3.22)

add_executable(test
    test.cpp
)

# 链接根项目的库,此处写法无误
target_link_libraries(test
    project_root
)

额外说明

  • 头文件引用无需额外配置:因为你给根库设置了PUBLIC类型的target_include_directories,当测试程序链接该库时,CMake会自动将头文件目录传递给测试目标,不需要在test目录里重复添加target_include_directories。
  • 验证方法:修复后重新执行CMake配置与构建,确认根库的源文件被正常编译,测试程序即可成功链接库中的函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:21:25