2017-06-02 2 views
1

Freeglut-3.0.0 est construit avec cmake (makefiles MinGW) et mingw et ensuite installé avec succès avec mingw32-make install à C:/Program Files (x86)/freeglut.CMake ne peut pas trouver freeglut-3.0.0

Mon CMakeLists.txt est:

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}) 

Maintenant erreur imprime CMake: Could NOT find GLUT (missing: GLUT_glut_LIBRARY).

Je ne peux pas comprendre ce que je fais mal.

Répondre

2

Votre déclaration de fichier CMakeLists.txt

find_package(GLUT REQUIRED) 

va exécuter ce code de FindGLUT.cmake

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

et find_library est dans votre scénario incapable de trouver des glut glut32 freeglut bibliothèques, parce qu'il ne sait rien de l'endroit où ils sont (en réalité sous C:/Program Files (x86)/freeglut).

Dans votre cas, vous pouvez définir $ (OPENGL_LIBRARY_DIR) dans le répertoire à droite, qui est celui qui contient le fichier freeglut.dll, par exemple:

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

si le fichier est dans « C:/Program Fichiers (x86)/freeglut/lib ".

+0

Merci! Ça a marché. Mais comment l'utilisateur va spécifier ce chemin (puisque FindGLUT aura besoin de ses variables au lieu de OPENG_LIBRARY_DIR au cas où il ne trouvera pas GLUT)? Aussi, je construis aussi pour Linux, et CmakeLists.txt devrait fonctionner sur les deux plates-formes. Actuellement, il définit OPENGL_LIBRARY_DIR dans l'instruction 'if (WIN32)'. – slavust

+0

pour l'intérêt de multiplateforme, mieux vaut définir [CMAKE_PREFIX_PATH] (https://cmake.org/cmake/help/v3.4/variable/CMAKE_PREFIX_PATH.html#variable:CMAKE_PREFIX_PATH) à un parent de '' '" lib/< freeglutlibrary> "' '', comme '" c:/program files (x86)/freeglut "' dans votre scénario spécifique. Il est préférable d'éviter tout 'SET' spécifique dans votre cmake, mais laissez l'utilisateur final définir le préfixe approprié avec' -DCMAKE_PREFIX_PATH = 'au moment de la configuration. Peut-être que l'utilisation d'OPTIONS pour permettre à enduser de définir un chemin spécifique vers freeglut serait également judicieuse (et la valeur de l'option serait ajoutée à 'CMAKE_PREFIX_PATH' par votre script) –

+0

Oublié de dire que pour Linux, vous n'avez rien à configurer pour la découverte de librairie freeglut, il devrait simplement fonctionner sans paramètres supplémentaires –