CMake中如何为同级目录配置include_directories引入LibEigen
解决方案
1. 用全局根目录变量CMAKE_SOURCE_DIR替代相对路径
把自建库CMakeLists里的路径改成基于主项目根目录的全局变量:
include_directories(${CMAKE_SOURCE_DIR}/lib/eigen/Eigen)
CMAKE_SOURCE_DIR指向主项目最顶层CMakeLists.txt所在的目录,不管子模块的CMakeLists处于哪个层级,这个变量都能稳定指向根目录,避免相对路径因目录嵌套层级变化而出错。
2. 更规范:用target_include_directories实现模块化管理
全局include_directories会把路径加到所有目标的包含目录里,不够模块化。推荐用目标级别的包含目录设置:
主项目CMakeLists写法:
# 定义Eigen的包含路径变量并全局传递 set(EIGEN_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/lib/eigen/Eigen) include_directories(${EIGEN_INCLUDE_DIR}) # 引入自建库子模块 add_subdirectory(lib/自建库)
自建库CMakeLists写法:
# 给自建库目标指定Eigen包含路径,PUBLIC表示依赖该库的目标也能继承此路径 target_include_directories(你的自建库目标名 PUBLIC ${EIGEN_INCLUDE_DIR})
3. 排查路径拼写与实际目录匹配问题
- 确认目录名大小写是否一致(比如Eigen是否写成eigen),部分系统(如Linux)对路径大小写敏感
- 可以在自建库CMakeLists中添加调试代码,打印实际路径验证:
message(STATUS "当前自建库目录:${CMAKE_CURRENT_SOURCE_DIR}") message(STATUS "拼接后的Eigen路径:${CMAKE_CURRENT_SOURCE_DIR}/../eigen/Eigen")
运行CMake时查看输出,确认路径是否真的指向Eigen的头文件目录。
内容的提问来源于stack exchange,提问作者ChrizZlyBear
相关产品推荐
相关产品推荐

