2017-06-02 103 views
1

Freeglut-3.0.0使用cmake(MinGW makefiles)和mingw構建,然後使用mingw32-make installC:/Program Files (x86)/freeglut成功安裝。CMake無法找到freeglut-3.0.0

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的打印錯誤:Could NOT find GLUT (missing: GLUT_glut_LIBRARY).

我想不出什麼我做錯了。

回答

2

你的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:/程序文件(x86)/ freeglut/lib「目錄。

+0

謝謝!這工作。但是用戶如何指定這個路徑(因爲FindGLUT將需要它的變量而不是OPENG_LIBRARY_DIR,以防它找不到GLUT)?另外,我也在爲Linux構建,而CmakeLists.txt應該可以在兩個平臺上運行。目前它在'if(WIN32)'語句中設置OPENGL_LIBRARY_DIR。 – slavust

+0

爲了多平臺的緣故,最好將[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 = '設置正確的前綴。也許使用OPTIONS讓最終用戶設置一個特定的路徑到freeglut也是很明智的(而且這個選項的值將會被你的腳本附加到'CMAKE_PREFIX_PATH') –

+0

忘了說,對於Linux你不需要設置任何東西來發現freeglut庫,它應該只是沒有額外的設置 –