【问题标题】:Building GLFW3 Application with CMAKE - GLFW_LIBRARIES doesnt set使用 CMAKE 构建 GLFW3 应用程序 - GLFW LIBRARIES 未设置
【发布时间】:2016-03-25 20:37:50
【问题描述】:

我正在尝试使用 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 函数的未定义引用。我认为这是 GLFW_LIBRARIES 没有正确设置的结果。

【问题讨论】:

    标签: cmake glfw pkg-config


    【解决方案1】:

    我不知道如何使用 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")
    

    【讨论】:

    • 对于目标链接库,可以使用 ${GLFW3_LIBRARY} 代替 glfw。
    【解决方案2】:

    由于 CMake 3.1 pkg_check_modules 使用来自 CMAKE_PREFIX_PATH 变量的附加路径来搜索 .pc 文件。搜索的执行方式与命令find_library 中的类似,但在结果路径中添加了额外的子目录pkgconfig/。具体来说,对于CMAKE_PREFIX_PATH中的每个<prefix>,在下一个目录中搜索.pc文件:

    <prefix>/lib[64]/[<arch>/]pkgconfig
    

    (适当时添加后缀64 和特定于架构的子目录)。

    所以有了文件/usr/local/lib/pkgconfig/glfw3.pc,您需要将CMAKE_PREFIX_PATH 设置为/usr/local,以便pkg_check_modules 能够找到它。变量可以设置:

    1) 在CMakeLists.txt 脚本本身中,或

    2) 在命令行中

    cmake -DCMAKE_PREFIX_PATH=<...> <source-dir>
    

    3) 作为环境一(取决于操作系统)。


    在 CMake 3.1 之前(和之后)可以通过 PKG_CONFIG_PATH environment 变量指定额外的搜索目录。

    例如文件/usr/local/lib/pkgconfig/glfw3.pc 变量PKG_CONFIG_PATH 应该包含/usr/local/lib/pkgconfig

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-09
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 2020-10-20
      • 1970-01-01
      相关资源
      最近更新 更多