IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Vulkan et CMake


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Le Farfadet Spatial
    Homme Profil pro
    En cours de précision…
    Inscrit en
    Avril 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En cours de précision…

    Informations forums :
    Inscription : Avril 2008
    Messages : 190
    Par défaut Vulkan et CMake
    Salut à tous !

    Je suis en train de suivre les tutoriels Vulkan que l’on trouve sur ce site :

    https://vulkan-tutorial.com/

    Les tutoriels utilisent C++, ce qui est mon langage cible, mais aussi Make. Justement, j’utilise Linux donc ça fonctionne très bien chez moi, mais je voudrais tout de même réussir à utiliser CMake.

    Soit le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #define GLFW_INCLUDE_VULKAN
    #include <GLFW/glfw3.h>
     
    #define GLM_FORCE_RADIANS
    #define GLM_FORCE_DEPTH_ZERO_TO_ONE
    #include <glm/vec4.hpp>
    #include <glm/mat4x4.hpp>
     
    #include <iostream>
     
    int main() {
        glfwInit();
     
        glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
        GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan windows",
                                              nullptr, nullptr);
     
        uint32_t extensionCount = 0;
        vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount,
                                               nullptr);
     
        std::cout << extensionCount << " extensions supported.\n";
     
        glm::mat4 matrix;
        glm::vec4 vec;
        auto test = matrix * vec;
     
        while(!glfwWindowShouldClose(window)) {
            glfwPollEvents();
        }
     
        glfwDestroyWindow(window);
     
        glfwTerminate();
     
        return 0;
    }
    Avec le fichier Makefile suivant, la compilation et l’exécution fonctionnent sans problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    FLAGS = -std=c++20 -O2
    LDFLAGS = -lglfw -lvulkan -ldl -lpthread -lX11 -lXxf86vm -lXrandr -lXi
     
    VulkanTest: main.cpp
    	g++ $(CFLAGS) -o VulkanTest main.cpp $(LDFLAGS)
     
    .PHONY: test clean
     
    test: VulkanTest
    	./VulkanTest
     
    clean:
    	rm -f VulkanTest
    En revanche, avec le fichier CMakeLists.txt suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    cmake_minimum_required(VERSION 3.13)
     
    set(EXECUTABLE_NAME tutoriel-vulkan)
     
    project(${EXECUTABLE_NAME} CXX)
     
    set(CMAKE_CXX_STANDARD 20)
     
    add_executable(${EXECUTABLE_NAME} main.cpp)
     
    find_package(Vulkan REQUIRED)
    include_directories(${Vulkan_INCLUDE_DIRS})
    target_link_libraries(${EXECUTABLE_NAME} Vulkan::Vulkan)
     
    find_package(glm REQUIRED)
    include_directories(${GLM_INCLUDE_DIRS})
    target_link_libraries(${EXECUTABLE_NAME} glm::glm)
     
    find_package(glfw3 REQUIRED)
    include_directories(${GLFW_INCLUDE_DIRS})
    target_link_libraries(${EXECUTABLE_NAME} ${GLFW_LIBRARIES})
    La configuration du projet fonctionne comme attendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ cmake ..
    -- The CXX compiler identification is GNU 13.1.1
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Check for working CXX compiler: /usr/lib64/ccache/c++ - skipped
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Found Vulkan: /lib64/libvulkan.so (found version "1.3.243") found components: glslc glslangValidator 
    -- Configuring done (0.3s)
    -- Generating done (0.0s)
    -- Build files have been written to: /home/yoann/program/C++/tutoriel-vulkan/build
    Mais par contre, la compilation échoue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $ cmake --build .
    [ 50%] Building CXX object CMakeFiles/VulkanTest.dir/main.cpp.o
    [100%] Linking CXX executable VulkanTest
    /usr/bin/ld*: CMakeFiles/VulkanTest.dir/main.cpp.o*: dans la fonction «*main*»*:
    main.cpp:(.text+0x9)*: référence indéfinie vers «*glfwInit*»
    /usr/bin/ld*: main.cpp:(.text+0x18)*: référence indéfinie vers «*glfwWindowHint*»
    /usr/bin/ld*: main.cpp:(.text+0x37)*: référence indéfinie vers «*glfwCreateWindow*»
    /usr/bin/ld*: main.cpp:(.text+0xa0)*: référence indéfinie vers «*glfwPollEvents*»
    /usr/bin/ld*: main.cpp:(.text+0xac)*: référence indéfinie vers «*glfwWindowShouldClose*»
    /usr/bin/ld*: main.cpp:(.text+0xc1)*: référence indéfinie vers «*glfwDestroyWindow*»
    /usr/bin/ld*: main.cpp:(.text+0xc6)*: référence indéfinie vers «*glfwTerminate*»
    collect2: erreur: ld a retourné le statut de sortie 1
    gmake[2]: *** [CMakeFiles/VulkanTest.dir/build.make:98: VulkanTest] Error 1
    gmake[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/VulkanTest.dir/all] Error 2
    gmake: *** [Makefile:91: all] Error 2
    Il semble bien qu’il ne parvient pas à lier l’exécutable avec la bibliothèque Glfw, alors que, clairement, elle est installée sur mon système vu que la compilation fonctionne avec le fichier Makefile. Ceci, en dépit des directives que j’ai mises dans le fichier CMakeLists.txt. Clairement, j’ai fait une erreur dans ce fichier CMakeLists.txt, mais je ne sais pas comment corriger l’erreur. Quelqu’un a-t-il une idée pour m’aider ?

    À bientôt.

  2. #2
    Membre éclairé
    Avatar de Le Farfadet Spatial
    Homme Profil pro
    En cours de précision…
    Inscrit en
    Avril 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En cours de précision…

    Informations forums :
    Inscription : Avril 2008
    Messages : 190
    Par défaut
    Re-salut à tous !

    Bon, évidemment, j’ai trouvé la solution en posant la question…

    Voici un fichier CMakeLists.txt qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    cmake_minimum_required(VERSION 3.13)
     
    set(EXECUTABLE_NAME VulkanTest)
     
    project(${EXECUTABLE_NAME} CXX)
     
    set(CMAKE_CXX_STANDARD 20)
     
    add_executable(${EXECUTABLE_NAME} main.cpp)
     
    find_package(Vulkan REQUIRED)
    include_directories(${Vulkan_INCLUDE_DIRS})
    target_link_libraries(${EXECUTABLE_NAME} Vulkan::Vulkan)
     
    find_package(glm REQUIRED)
    include_directories(${GLM_INCLUDE_DIRS})
    target_link_libraries(${EXECUTABLE_NAME} glm::glm)
     
    find_package(glfw3 REQUIRED)
    include_directories(${GLFW_INCLUDE_DIRS})
    target_link_libraries(${EXECUTABLE_NAME} glfw)
    Voilà, problème résolu…

    À bientôt.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. CMake comme environnement de développement
    Par Spont dans le forum Choisir un environnement de développement
    Réponses: 8
    Dernier message: 27/11/2007, 14h42
  2. Problème avec cmake : signification d'une erreur
    Par G3G3 dans le forum Systèmes de compilation
    Réponses: 0
    Dernier message: 25/10/2007, 11h24
  3. Kubuntu - KDevelop : cmake non trouvé
    Par Trap D dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 09/07/2007, 10h49
  4. Problèmes d'installation : KDevelop / KUbuntu / CMake
    Par Feriaman dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 03/02/2007, 23h55
  5. cmake vs automake vs bjam
    Par epsilon68 dans le forum Choisir un environnement de développement
    Réponses: 16
    Dernier message: 14/11/2006, 09h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo