CMakeLists.txt 中的 GLM 链接

GLM linking in CMakeLists.txt

我不能 link glm 库与我的可执行文件。我尝试 link 通过 ${GLM_INCLUDE_DIRS}${GLM_LIBRARIES}${GLM_LIBRARY_DIRS} cmake 变量,但它不起作用。

我如何 link glm 的库和 inludes 与我的可执行文件?

我正在使用 find_package() 方法:

find_package(glm REQUIRED PATHS "${GLM_BINARY_DIR}" NO_DEFAULT_PATH)

并且 find_package() 没有任何问题,但下面的这些状态消息没有任何显示:

message(STATUS "GLM includes ${GLM_INCLUDE_DIRS}")
message(STATUS "GLM libraries ${GLM_LIBRARY_DIRS}")

我的做法是错误的。

来自 OpenGL GLM 官方页面:

OpenGL Mathematics (GLM) is a header only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specifications.

因此,我只需要指定构建的 GLM 库的 /include 路径,链接器在链接给定目标时应在其中搜索库。

可以通过cmake target_include_directories()函数处理。这解决了我的问题:

target_include_directories(myExecutable "${GLM_BINARY_DIR}/include")

${GLM_BINARY_DIR} 由我定义并指向存储 GLM 二进制文件的位置。

Config GLM 脚本定义了 IMPORTED 目标 glm::glm。 因此,在 CMake 代码中使用 GLM 的正确方法是 link 与该目标。 这明确写在 documentation:

set(glm_DIR <installation prefix>/lib/cmake/glm) # if necessary
find_package(glm REQUIRED)
target_link_libraries(<your executable> glm::glm)

GLM_LIBRARIESGLM_INCLUDE_DIRS 等变量通常由 Find 脚本定义(随 CMake 或消费者项目一起提供)。

Config 脚本,随安装包一起提供,通常定义 IMPORTED 目标。

GLM 没有查找脚本(参见 ),并且 find_package 调用中的 PATHS 选项显式请求配置脚本。