我无法将 glm 库与我的可执行文件链接。我尝试通过链接
${GLM_INCLUDE_DIRS}
、${GLM_LIBRARIES}
和 ${GLM_LIBRARY_DIRS}
cmake 变量,但它不起作用。
如何将库和 glm 包含与我的可执行文件链接?
我正在使用
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}")
Config 脚本定义了 IMPORTED 目标
glm::glm
。
因此,在 CMake 代码中使用 GLM 的正确方法是链接到该目标。
这在文档中明确写过:
set(glm_DIR <installation prefix>/lib/cmake/glm) # if necessary
find_package(glm REQUIRED)
target_link_libraries(<your executable> glm::glm)
像
GLM_LIBRARIES
或 GLM_INCLUDE_DIRS
这样的变量通常由 Find 脚本定义(随 CMake 或消费者项目一起提供)。
Config脚本随安装包一起提供,通常定义导入的目标。
GLM 没有查找脚本(请参阅 FindGLM.cmake 不在 glm 0.9.7 中,它是在 CMAKE 中查找库的已弃用方法吗?),并且
PATHS
调用中的 find_package
选项显式请求配置脚本.
老实说,我正在使用 MacOS,并且我发现从 github 安装 GLM 可以工作:
git clone https://github.com/g-truc/glm
然后我构建并安装它:
cd /path/to/glm
cmake \
-DGLM_BUILD_TESTS=OFF \
-DBUILD_SHARED_LIBS=OFF \
-B build .
cmake --build build -- all
cmake --build build -- install
我的方法是错误的。
摘自OpenGL GLM官方页面:
OpenGL Mathematics (GLM) 是基于 OpenGL 着色语言 (GLSL) 规范的图形软件的纯标头 C++ 数学库。
所以,我只需要指定构建的 GLM 库的
/include
路径,链接器在链接给定目标时应在其中搜索库。
这可以通过 cmake
target_include_directories()
函数来处理。这解决了我的问题:
target_include_directories(myExecutable "${GLM_BINARY_DIR}/include")
${GLM_BINARY_DIR}
由我定义,指向 GLM 二进制文件的存储位置。