如何从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
相关产品推荐
相关产品推荐

