嗨,使用 find_package(glfw3) 不适用于较新版本的已安装库。
我已经在 ubuntu yakkety 上安装了 glfw3:
apt-get install libglfw3-dev
dpkg --status libglfw3-dev
安装的版本是 3.2.1-1。
然后,我有 cmake 文件:
find_package(glfw3)
get_cmake_property(_variableNames VARIABLES)
foreach (_variableName ${_variableNames})
message(STATUS "${_variableName}=${${_variableName}}")
endforeach()
像cmake . | grep -i glfw
一样运行它会给出(在 yakkety 上):
-- CONFIG_FILES=/usr/lib/x86_64-linux-gnu/cmake/glfw3/glfw3Targets-none.cmake
-- GLFW3_DIR=GLFW3_DIR-NOTFOUND
-- _DIR=/usr/lib/x86_64-linux-gnu/cmake/glfw3
-- glfw3_CONFIG=/usr/lib/x86_64-linux-gnu/cmake/glfw3/glfw3Config.cmake
-- glfw3_CONSIDERED_CONFIGS=/usr/lib/x86_64-linux-gnu/cmake/glfw3/glfw3Config.cmake
-- glfw3_CONSIDERED_VERSIONS=3.2.1
-- glfw3_DIR=/usr/lib/x86_64-linux-gnu/cmake/glfw3
-- glfw3_FOUND=1
-- glfw3_VERSION=3.2.1
-- glfw3_VERSION_COUNT=3
-- glfw3_VERSION_MAJOR=3
-- glfw3_VERSION_MINOR=2
-- glfw3_VERSION_PATCH=1
-- glfw3_VERSION_TWEAK=0
-- glfw_DIR=glfw_DIR-NOTFOUND
而在 ubuntu xenial 上,它提供:
-- GLFW3_INCLUDE_DIR=/usr/include
-- GLFW3_LIBRARY=/usr/lib/x86_64-linux-gnu/libglfw.so
-- GLFW3_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu
-- GLFW3_VERSION=3.1.2
-- glfw3_CONFIG=/usr/lib/x86_64-linux-gnu/cmake/glfw3/glfw3Config.cmake
-- glfw3_CONSIDERED_CONFIGS=/usr/lib/x86_64-linux-gnu/cmake/glfw3/glfw3Config.cmake
-- glfw3_CONSIDERED_VERSIONS=3.1.2
-- glfw3_DIR=/usr/lib/x86_64-linux-gnu/cmake/glfw3
-- glfw3_FOUND=1
-- glfw3_VERSION=3.1.2
-- glfw3_VERSION_COUNT=3
-- glfw3_VERSION_MAJOR=3
-- glfw3_VERSION_MINOR=1
-- glfw3_VERSION_PATCH=2
-- glfw3_VERSION_TWEAK=0
总而言之,较新的版本缺少GLFW3_INCLUDE_DIR
和GLFW3_LIBRARY
。
GLFW 3.2 及更高版本使用 CMake 目标导出功能。 您使用find_package
导入的glfw
目标包含必要的目录、链接时依赖项等。
从 3.2 开始,您需要做的就是:
find_package(glfw3)
target_link_libraries(myapplicationname glfw)
3.2 文档在解释这个方面做得很差。 它在 3.3 中有所改进。
谢谢你。 我现在已经使它适用于两个版本。
最有用的评论
GLFW 3.2 及更高版本使用 CMake 目标导出功能。 您使用
find_package
导入的glfw
目标包含必要的目录、链接时依赖项等。从 3.2 开始,您需要做的就是: