+ Répondre à la discussion Actualité déjà publiée
  1. #1
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    22 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 22 474
    Points : 155 325
    Points
    155 325
    Billets dans le blog
    10

    Par défaut Utiliser CMake pour compiler un projet

    Bonjour à tous,

    J'ai écrit un tutoriel sur CMake afin d'offrir un guide pour toute personne souhaitant compiler son projet à travers CMake. J'ai fait de mon mieux, pour éluder les différentes questions que l'on pourrait se poser (gestion d'une bibliothèque, support de Qt, support du C++...).
    De plus, j'ai aussi rajouter une section sur CPack pour la distribution de votre projet.

    J'espère que l'article vous plaira.

    Bonne lecture.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Architecte Web / Android
    Inscrit en
    août 2003
    Messages
    4 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 4 615
    Points : 11 789
    Points
    11 789

    Par défaut

    Salut et merci pour cet article qui tombe à pique pour moi

    J'ai cependant quelques questions :

    - Après avoir généré un projet visual studio , je me rend compte que si j'ajoute un fichier au projet depuis visual celui ci ne le créer pas dans le dossier des fichiers sources mais directement au niveau des sln. Est ce possible de faire en sorte que les IDE soit automatiquement configurés pour écrire au bon endroit ?

    -Dans l'exemple de la lib externe , on part ici du principe que la lib à été installé sur le système. Ca marche bien sous linux mais sous windows on est pas du tout dans le même cas si ? On se retrouve généralement avec les fichiers sources que l'on doit précompiler mais la lib n'est pas réellement installée sur le système.
    Faut il créer un CMake par librairie , ou faut il plutôt les précompiler ?
    J'ai fait le test avec openssl que j'ai compilé sous windows. Je men suis sortit en faisant comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #OPENSSL
    set(OPENSSL_ROOT_DIR "lib/openssl-1.0.2d/lib")
    set(OPENSSL_INCLUDE_DIR "lib/openssl-1.0.2d/lib/include")
    set(OPENSSL_LIBRARIES "lib/openssl-1.0.2d/lib/lib")
    find_package(OpenSSL REQUIRED)
    Mais je sais pas si c'est la "bonne" façon de faire.

    - Dernière chose , peut on appeler plusieurs fois target_include_directories(main PUBLIC ${PNG_INCLUDE_DIR}) et target_link_libraries (main ${PNG_LIBRARY}) (une fois par lib) ou doit t'on le faire une fois tout à la fin avec toutes les libs ?

    Merci
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    22 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 22 474
    Points : 155 325
    Points
    155 325
    Billets dans le blog
    10

    Par défaut

    Bonjour,

    Très bonnes questions.
    Pour la première : rajout des fichiers ->
    Non, les IDE ne prennent que très rarement en compte les fichiers de projets de CMake. Cela est totalement logique sachant que nous lançons l'idée à partir des fichiers générés par CMake. Du coup l'IDE ne sait pas et ne modifiera que ses fichiers de projet.
    Qt Creator permet de lire les fichiers CMakeLists.txt, et leur solution : "relancer CMake a chaque nouveau fichier pour mettre à jour l'arborescence du projet".
    Pour conclure, il faut modifier le fichier CMakeLists.txt pour ajouter un nouveau fichier. Il existe une technique où l'on peut inclure tous les fichiers en utilisant un joker (wildcard) mais elle est dépréciée/déconseillée et c'est pour cela que le tutoriel n'en parle pas. Même avec cette seconde méthode, il faut relancer CMake pour mettre à jour les fichiers de l'IDE.

    Seconde question : Sous Windows c'est un peu plus pénible. Ce que l'on va faire, c'est de ne rien définir dans le fichier CMakeLists.txt pour laisser l'utilisateur libre de choisir où la bibliothèque est. Sous Windows, il fera cela au travers l'interface graphique de CMake. Maintenant, si vous embarquez la bibliothèque avec votre projet (soit directement sur votre propre git, ou en sous module, soit en demandant même à CMake de récupérer la bibliothèque), vous pouvez toujours définir un chemin de base (par défaut) si l'utilisateur n'en définit aucun (un peu comme vous faites actuellement (sauf que là, vous ne laissez pas la possibilité à l'utilisateur)).
    Finalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(OPENSSL_ROOT_DIR "lib/openssl-1.0.2d/lib")
    Seule cette variable est utile. Les deux autres devraient être complétées par le find_package.

    Troisième question : oui, vous pouvez appeler plusieurs fois la fonctions. Par contre, de mémoire (il faut donc revoir la documentation ), le target_link_libraries() doit être placées après le add_executable/add_library, sinon, il ne sait pas à quel exécutable il doit faire l'ajout. Le premier argument correspond au nom de l'exécutable définit à travers le add_executable/add_library.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    7 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 7 329
    Points : 15 706
    Points
    15 706

    Par défaut Remarque pour du C pur

    Bonsoir,

    Je me suis servi de CMake pour une compilation sous Linux Debian.

    J'ai eu une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CMAKE_CCX_COMPILER-NOTFOUND
    J'ai résolu le problème en installant le support C++

    faisant du C pour ce projet et non du C++, je n'avais pas g++.

    De là j'ai pu faire ma compilation C.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    22 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 22 474
    Points : 155 325
    Points
    155 325
    Billets dans le blog
    10

    Par défaut

    Bonjour,

    Je pense que le problème se règle simplement avec la commande :
    Code cmake : Sélectionner tout - Visualiser dans une fenêtre à part
    project(le_nom_du_projet LANGUAGES C)
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    7 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 7 329
    Points : 15 706
    Points
    15 706

    Par défaut

    ça marche avec :
    j'ai désinstallé g++ pour vérifier, ça fonctionne.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Membre éprouvé
    Avatar de tails
    Homme Profil pro
    Inscrit en
    novembre 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : novembre 2003
    Messages : 596
    Points : 904
    Points
    904
    Billets dans le blog
    8

    Par défaut

    Bonsoir

    Merci pour le tutoriel. Il m'a permit de bien comprendre le fonctionnement de CMake.

    Après, pour aller plus loin :
    • Mon projet personnel inclut toutes les sources/headers dans le dossier <racine_projet>/src et ce même dossier contient le CMakeLists "racine"
    • je souhaite faire en sorte que le dossier racine n'ai aucun fichier supplémentaire (hormis éventuellement le dossier généré par cmake)
    • Je souhaiterais aussi générer l'executable dans le dossier <racine_projet>/bin


    Est-ce possible ?


    Merci d'avance

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    22 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 22 474
    Points : 155 325
    Points
    155 325
    Billets dans le blog
    10

    Par défaut

    Bonjour,

    Il est totalement possible de spécifier un dossier "build" où CMake placera tous ces fichiers temporaires. D'ailleurs, l'interface sous Windows montre cette idée par les deux premières entrées. Mais sous Linux, cela se fait juste avec :
    cmake . ./build
    Pour copier le binaire, on peut utiliser la fonction install(). Si c'est sous Linux, alors il faut spécifier le PREFIX dans le dossier du CMakeLists. Finalement, je crois qu'il y a une possibilité de faire une simple copie sans passer par install().
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Membre éprouvé
    Avatar de tails
    Homme Profil pro
    Inscrit en
    novembre 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : novembre 2003
    Messages : 596
    Points : 904
    Points
    904
    Billets dans le blog
    8

    Par défaut

    Merci

    Je vais donc procéder de cette manière.

Discussions similaires

  1. Quel IDE utiliser pour compiler mon projet
    Par houlla dans le forum Pascal
    Réponses: 2
    Dernier message: 11/06/2011, 10h07
  2. Réponses: 1
    Dernier message: 27/09/2010, 12h56
  3. Utiliser CMake pour compiler des projets Qt
    Par gbdivers dans le forum Qt
    Réponses: 0
    Dernier message: 07/09/2010, 14h18

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