CMake找不到freeglut-3.0.0

sla*_*ust 7 windows cmake freeglut

Freeglut-3.0.0是使用cmake(MinGW makefile)和mingw构建的,然后使用mingw32-make installto 成功安装C:/Program Files (x86)/freeglut

我的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})
Run Code Online (Sandbox Code Playgroud)

现在,CMake打印错误: Could NOT find GLUT (missing: GLUT_glut_LIBRARY).

我不知道自己在做什么错。

Luc*_*ppa 5

您的CMakeLists.txt文件语句

find_package(GLUT REQUIRED)
Run Code Online (Sandbox Code Playgroud)

将要从FindGLUT.cmake执行此代码

find_library( GLUT_glut_LIBRARY NAMES glut glut32 freeglut
    PATHS
    ${OPENGL_LIBRARY_DIR}
    ${GLUT_ROOT_PATH}/Release
    )
Run Code Online (Sandbox Code Playgroud)

并且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")
Run Code Online (Sandbox Code Playgroud)

给定文件在C:/Program Files (x86)/freeglut/lib目录下。

  • 为了多平台的缘故,最好将 [CMAKE_PREFIX_PATH](https://cmake.org/cmake/help/v3.4/variable/CMAKE_PREFIX_PATH.html#variable:CMAKE_PREFIX_PATH) 设置为 ```"lib/<freeglutlibrary 的父级>"```,例如您的特定场景中的 `"c:/program files (x86)/freeglut"`。最好避免在 cmake 中使用任何特定的“SET”,但让最终用户在配置时使用“-DCMAKE_PREFIX_PATH=<your path>”设置正确的前缀。也许使用 OPTIONS 让最终用户设置 freeglut 的特定路径也是明智的(并且该选项的值将由您的脚本附加到“CMAKE_PREFIX_PATH”) (2认同)