CMake无法找到freeglut-3.0.0。

9

Freeglut-3.0.0使用cmake(MinGW makefiles)和mingw构建,然后成功安装到C:/Program Files (x86)/freeglut,使用mingw32-make install命令。

我的CMakeLists.txt文件如下:

    cmake_minimum_required(VERSION 3.7)

    project(math_tests)

    set(TESTS_SOURCES tests.cpp gl_core_3_3.c)
    set(CMAKE_CXX_STANDARD 11)

    # GLUT
    find_package(GLUT REQUIRED)
    include_directories(${GLUT_INCLUDE_DIR})
    if(NOT GLUT_FOUND)
        message(ERROR "GLUT not found!")
    endif(NOT GLUT_FOUND)

    # OpenGL
    find_package(OpenGL REQUIRED)
    include_directories(${OpenGL_INCLUDE_DIRS})
    link_directories(${OpenGL_LIBRARY_DIRS})
    add_definitions(${OpenGL_DEFINITIONS})
    if(NOT OPENGL_FOUND)
        message(ERROR "OPENGL not found!")
    endif(NOT OPENGL_FOUND)

    add_executable(tests ${TESTS_SOURCES})
    target_link_libraries(tests math ${GLUT_LIBRARIES} ${OPENGL_LIBRARIES})

现在CMake打印错误:无法找到GLUT(缺少:GLUT_glut_LIBRARY)。

我弄不清楚我哪里做错了。

1个回答

8
您的 CMakeLists.txt 文件语句
find_package(GLUT REQUIRED)

将从FindGLUT.cmake执行此代码。

find_library( GLUT_glut_LIBRARY NAMES glut glut32 freeglut
    PATHS
    ${OPENGL_LIBRARY_DIR}
    ${GLUT_ROOT_PATH}/Release
    )

在您的情况下,find_library 无法找到任何 glut glut32 freeglut 库,因为它不知道它们的位置(对于您而言,它们位于 C:/Program Files (x86)/freeglut 下)。

在您的情况下,您可以将 ${OPENGL_LIBRARY_DIR} 设置为正确的目录,即包含 freeglut.dll 文件的目录,例如:

set(OPENGL_LIBRARY_DIR "C:/Program Files (x86)/freeglut/lib")

假设该文件位于C:/Program Files (x86)/freeglut/lib目录下。


谢谢!这个方案可行。但是用户将如何指定这个路径(因为如果FindGLUT没有找到GLUT,它将需要变量而不是OPENG_LIBRARY_DIR)?此外,我也在为Linux构建,并且CmakeLists.txt应该在两个平台上都能工作。目前它在 if (WIN32) 语句中设置OPENGL_LIBRARY_DIR。 - slavust
2
为了多平台的便利起见,最好将CMAKE_PREFIX_PATH设置为"lib/<freeglutlibrary>"的上级目录,比如在您的具体情况下设置为"c:/program files (x86)/freeglut"。在您的CMake中最好避免使用具体的SET命令,而是让最终用户在配置时使用-DCMAKE_PREFIX_PATH=<your path>来设置正确的前缀。或许使用OPTIONS让最终用户设置一个特定的freeglut路径也是合理的(并且选项的值会由您的脚本附加到CMAKE_PREFIX_PATH)。 - Luca Cappa
忘了说,对于Linux,您无需设置任何内容来发现freeglut库,它应该可以在没有其他设置的情况下正常工作。 - Luca Cappa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接