在 CMake 中获取包含库的包含路径列表

Posted

技术标签:

【中文标题】在 CMake 中获取包含库的包含路径列表【英文标题】:Getting the list of include paths WITH libraries in CMake 【发布时间】:2020-07-07 07:54:36 【问题描述】:

我一直面临 CMake 问题以及如何获取我在 C++ 项目中使用的包含库的路径。

添加的库如:

find_package(SDL2 CONFIG REQUIRED)
find_package(glm CONFIG REQUIRED)

我尝试查询以下内容但没有成功

get_property(dirlist DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
get_target_property(test projname INCLUDE_DIRECTORIES)

因为它只返回我使用 include_directories() 添加的内容,而不是库本身。

有什么解决办法吗?

【问题讨论】:

【参考方案1】:

如果 CMake 找到包,SDL2_INCLUDE_DIRSGLM_INCLUDE_DIR 包含包含文件的路径。

message("SDL2_INCLUDE_DIRS: " $SDL2_INCLUDE_DIRS) 
message("GLM_INCLUDE_DIR  : " $GLM_INCLUDE_DIR)

【讨论】:

CMake 找到包,但 SDL2_INCLUDE_DIR/SDL2_INCLUDE_DIRS 为空。我唯一能得到的是 SDL2_DIR 但它也不正确。 GLM 也一样。最好有一个解决方案,列出构建时使用的包含标志/导出时留在 compile_commands.json 中的包含标志。 你可以在做 cmake .. 之后用 ccmake 检查路径 .. 目标是在 CMake 文件中自动将其导出到文件中 我的意思是你可以看到为 sdl2、glm libs 设置了哪些变量 SDL2_CONFIG,SDL2_CONSIDERED_CONFIGS,SDL2_CONSIDERED_VERSIONS,SDL2_DIR,SDL2_FOUND,SDL2_VERSION,SDL2_VERSION_COUNT,SDL2_VERSION_MAJOR,SDL2_VERSION_MINOR,SDL2_VERSION_PATCH,SDL2_VERSION_TWEAK其中没有一个是正确的,包括SDL2_DIR不幸的是,与相同的对GLM 跨度>

以上是关于在 CMake 中获取包含库的包含路径列表的主要内容,如果未能解决你的问题,请参考以下文章

更改静态库的包含路径

从 CMake 中使用的库继承包含目录

CMake 包含路径

Cmake包含系统和程序文件的路径

VS2019+cmake 方式添加ffmpeg库文件,cmake添加lib文件dll文件,包含目录示例

CMake 和绝对标题路径