【问题标题】:Cannot find package GLFW using CMake使用 CMake 找不到包 GLFW
【发布时间】:2019-02-22 20:38:57
【问题描述】:

我的项目结构如下所示:

  • CMakeLists.txt
  • 部门
    • 闪闪发光
    • glfw
  • 包括
    • ...
    • 图形
      • ...
      • CMakeLists.txt

值得关注的两个 CMakeLists.txt 文件:

CMakeLists.txt

cmake_minimum_required(VERSION 3.9)
project(noam_engine)

find_package(glfw3 REQUIRED)
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)

set(CMAKE_CXX_STANDARD 11)
set(NE_LIBRARIES common math graphics)

FOREACH(lib ${NE_LIBRARIES})
    add_subdirectory(src/${lib})
ENDFOREACH(lib)

add_executable(noam_engine src/main.cpp)

if(OPENGL_FOUND AND GLEW_FOUND)
    target_include_directories(noam_engine PUBLIC include ${OPENGL_INCLUDE_DIR} ${GLEW_INCLUDE_DIRS})
    target_link_libraries(noam_engine ${NE_LIBRARIES})
endif()

src/graphics/CMakeLists.txt

cmake_minimum_required(VERSION 3.9)

find_package(glfw3 REQUIRED)
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)

file(GLOB SRC "*.cpp")
add_library(graphics ${SRC})

if(OPENGL_FOUND AND GLEW_FOUND)
    target_include_directories(graphics PUBLIC ${PROJECT_SOURCE_DIR}/include ${OPENGL_INCLUDE_DIR} ${GLEW_INCLUDE_DIRS})
    target_link_libraries(graphics ${OPENGL_gl_LIBRARY} ${GLFW3_LIBRARY} ${GLEW_LIBRARIES})
    message(STATUS "GLFW and GLEW successfully linked")
    message(STATUS ${OPENGL_gl_LIBRARY})
    message(STATUS ${GLFW3_LIBRARY})
    message(STATUS ${GLEW_LIBRARIES})
else()
    message(STATUS "Cannot find GL libraries")
endif()

简而言之,我想创建一堆引擎的静态库,特别是将 graphics 库与 GL 链接,最后将它们与根 CMakeLists.txt 中的可执行文件链接。

但我注意到 ${GLFW3_LIBRARY} 是空的,并且出现了链接器错误,例如,当我调用 glfwInit() 时。我在 GLFW 的构建和安装过程中遵循了指南

cmake .
make
make install

我相信头文件和库在 /usr/local/* 中,但显然 CMake 找不到它们,或者我做错了什么。

我唯一的假设是 find_package 不知道在 deps/glfw/* 中的 glfw3Config.cmake

【问题讨论】:

  • 调用find_package(glfw3 REQUIRED)已经成功,但是调用结果取决于它使用的脚本。如果您有Findglfw3.cmake 脚​​本,则脚本的“文档”包含在其开头行中。如果你有glfw2Config.cmake 脚本,看起来像given one,那么find_package 调用的结果是一个glfw 目标,你需要链接你的库。

标签: opengl cmake glfw


【解决方案1】:

我从https://github.com/JoeyDeVries/LearnOpenGL/blob/master/cmake/modules/FindGLFW3.cmake 获取脚本并将其放入 cmake 文件夹。然后在 CMakeLists.txt 我添加了

list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")

现在一切正常

感谢@Tsyvarev

【讨论】:

  • 感谢指点!令人惊讶的是这有多大的麻烦。这个问题到处都是——甚至在 glfw 自己的论坛上——但没有明显的原因,他们没有包括它,CMake 也没有。 (我只是补充一下:底部的 ge_macros 不是必需的,如果还没有,则需要在 CMakeLists.txt 中设置 CMAKE_MODULES_PATH。)
猜你喜欢
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多