cmake - 使用 CMAKE 构建 GLFW3 应用程序 - GLFW LIBRARIES 未设置

标签 cmake glfw pkg-config

我正在尝试使用 glfw3 构建一个小项目,但无论我做什么,我都无法让 pkgconfig 设置 GLFW_LIBRARIES。

这是我的 CMakeList.txt

cmake_minimum_required(VERSION 3.3)
project(LearnGLSL)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

if (CMAKE_BUILD_TYPE STREQUAL "")
    set(CMAKE_BUILD_TYPE Debug)
endif()


if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/debug")
    set(PROJECT_BINARY_DIR "${CMAKE_SOURCE_DIR}/build/debug")
endif(CMAKE_BUILD_TYPE STREQUAL "Debug")


file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})


find_package(OpenGL REQUIRED)

find_package(PkgConfig REQUIRED)
pkg_check_modules(GLFW REQUIRED glfw3)



include_directories(
        ${OPENGL_INCLUDE_DIR}
        ${GLFW_INCLUDE_DIRS}
)


set(SOURCE_FILES main.cpp gl_core_4_3.cpp)

message(WARNING "${GLFW_LIBRARIES}")

add_executable(LearnGLSL ${SOURCE_FILES})
target_link_libraries(LearnGLSL ${OPENGL_gl_LIBRARY} ${GLFW_LIBRARIES})


add_custom_command(TARGET LearnGLSL  POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_directory
        ${CMAKE_SOURCE_DIR}/assets
        ${PROJECT_BINARY_DIR}
        COMMENT "Copy resources to build tree")

这是安装glfw3的地方
-- Installing: /usr/local/include/GLFW
-- Installing: /usr/local/include/GLFW/glfw3native.h
-- Installing: /usr/local/include/GLFW/glfw3.h
-- Installing: /usr/local/lib/cmake/glfw/glfw3Config.cmake
-- Installing: /usr/local/lib/cmake/glfw/glfw3ConfigVersion.cmake
-- Installing: /usr/local/lib/cmake/glfw/glfwTargets.cmake
-- Installing: /usr/local/lib/cmake/glfw/glfwTargets-noconfig.cmake
-- Installing: /usr/local/lib/pkgconfig/glfw3.pc
-- Installing: /usr/local/lib/libglfw3.a

我将是第一个承认我对 CMAKE 不太满意的人,但这似乎很简单,而且我已经尽我所能在谷歌上找到了。也许它是我没有注意到的错字。感谢任何帮助谢谢

哦,我忘了提到我在构建这个项目时得到了对 glfw 函数的 undefined reference 。我认为这是 GLFW_LIBRARIES 没有正确设置的结果。

最佳答案

我不知道如何使用 pkgconfig 找到 GLFW,但我认为在这种情况下您不需要 pkgconfig。由于 GLFW 本身是使用 CMake 构建的,因此它应该安装一个本地 CMake 配置模块,它确实如此。

嗯,差不多。从 v3.1.2 开始,官方 GLFW CMake 配置模块支持有点问题。相反,请使用 shaxbee's forkadasworks fork (基于 shaxbee 但更新)

有了那个 GLFW,你只需要找到 2 行:

find_package(glfw3 REQUIRED)
...
target_link_libraries(LearnGLSL ... glfw)

我还在您的 CMakeLists.txt 中发现了其他一些问题,因此我重复了整个脚本,并进行了修改:
cmake_minimum_required(VERSION 3.3)
project(LearnGLSL)

set(CMAKE_CXX_STANDARD 11) # no explicit compiler flags if possible

# don't read CMAKE_BUILD_TYPE, it has no meaning with multiconfig
# generators
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/build/debug")

# PROJECT_BINARY_DIR should not be set at all
# You establish the BINARY_DIR with the initial cmake command
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})

find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)

include_directories(${OPENGL_INCLUDE_DIR})

add_executable(LearnGLSL main.cpp gl_core_4_3.cpp)
target_link_libraries(LearnGLSL ${OPENGL_gl_LIBRARY} glfw)

add_custom_command(TARGET LearnGLSL POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_directory
    ${CMAKE_SOURCE_DIR}/assets
    ${PROJECT_BINARY_DIR}
    COMMENT "Copy resources to build tree")

关于cmake - 使用 CMAKE 构建 GLFW3 应用程序 - GLFW LIBRARIES 未设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34367424/

相关文章:

c++ - 使用柯南时,如何修复CMake中的未知命令错误?

c++ - OpenGL 批处理渲染器中的纹理出血/损坏

windows - 如何在 Windows 上为 pkg-config 编写 *.pc 文件?

c++ - 使用CMake的Qt moc错误

c - GCC -c 选项的 CMake 等价物是什么?

c++ - 尝试在 Mac 上编译 GLFW 时 GLFW 上的链接器错误

c - 将 C 风格的回调设置函数绑定(bind)到 D

c++ - windows下如何运行通过MSYS安装的pkg-config(for GTK+-3.0)获取绝对路径

c++ - 重新编译 libiconv,在已经成功安装后出现 gettext undefined symbol

c - 包括 malloc_np.h 的便携方式