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

Systèmes de compilation Discussion :

Quels outils pour un "makefile portable" ?


Sujet :

Systèmes de compilation

  1. #21
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Points : 608
    Points
    608
    Par défaut
    Citation Envoyé par Neckara Voir le message
    C'est ce qui est dit ici : http://florian-goujeon.developpez.co...nitiation/#LIV

    Et pour le Find c'est identique vu qu'on ne spécifie pas un chemin mais plusieurs.

    Ce n'est pas ce qui est écrit. Il est bien dit que le CMakeLists.txt est indépendant et que c'est ce fichier que tu distribues. Le CMakeCache est automatiquement généré et SI tu as une installation exotique tu peux avoir à y préciser les chemins. Mais vu que c'est lié à l'environnement, ce n'est pas prévisible et il n'y a rien à faire côté packaging.

    Côté dépendances, c'est lié à l'OS aussi. Un paquet debian/ubuntu/fedora/... peut très bien lister ce que tu veux comme dépendances. Le problème reste le boulot que tu auras à valider ça à chaque nouvelle version de distribution.

    Après tu dis faire des "petites bibliothèques", avec 50 dépendances je réfléchirai bien avant d'avoir à l'inclure dans un projet.

  2. #22
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Points : 608
    Points
    608
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Donc si j'ai 50 dépendances, il faut que l'utilisateur se fasse 50 compilations et installations de bibliothèques à la suite en allant rechercher à chaque fois où trouver la lib ?
    En général on package pour une distribution et le gestionnaire de paquet gère tout seul. On peut aussi simplement lister les dépendances et l'utilisateur fait appel à son gestionnaire de paquet pour installer tout ça.

    Exemple : http://ceph.com/docs/master/install/...prerequisites/

    L'utilisateur au moment où il lance CMake (ou autre build-system) aura un joli message indiquant les dépendances manquantes le cas échéant.

  3. #23
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par Joker-eph Voir le message
    En général on package pour une distribution et le gestionnaire de paquet gère tout seul. On peut aussi simplement lister les dépendances et l'utilisateur fait appel à son gestionnaire de paquet pour installer tout ça.

    Exemple : http://ceph.com/docs/master/install/...prerequisites/

    L'utilisateur au moment où il lance CMake (ou autre build-system) aura un joli message indiquant les dépendances manquantes le cas échéant.
    Tous les programmeurs ne sont pas sous Linux
    Et il va bien falloir compiler pour Windows vu que généralement, la majorité du public cible s'y trouve...

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Tous les programmeurs ne sont pas sous Linux
    Et il va bien falloir compiler pour Windows vu que généralement, la majorité du public cible s'y trouve...
    Sauf que sous Windows, tu fait juste une version 32 bits, avec tes libs, tu distribue cela en tout fermé et hop, t'a fini (Oui, pas de portage 64 bits, notamment car en ayant la mentalité le code fermé, y aura personne pour compiler en natif (vivement Windows RT tient) et que en plus, le peu qui s'y intéresse, trouveront trop pénible à faire une app pour les deux).
    Ce que je veux dire, c'est au nombre de jeu ou autre trucs qui restent en 32bits, les dépendances sont vites gérés : Tu files les DLL en 32 bits, dans la versions que tu veux de l'exécutable et hop fini

    Après, le système qui sera mieux, ce sera de faire des builds automatisé ou tout le environnement de travail pourra être récupérer par un script et mis à jour automatiquement. Il y a des solutions qui existent, sinon, il y a faire à la main.

    Mais bon, en dernier conseil, si tu as commencé un projet et que tu bosse sur un truc "instable", c'est d'avoir une copie locale de la version utilisée de la bibliothèque. Car si le truc instable change trop, le code de ton projet sera tout cassé tous les deux changements.

    EDIT :
    Pour le cas projet Windows et Linux, ce sont les dosiers lib qui contiennent les bons fichiers. Je veux dire par là, à coté des .so tu as les .lib. Tout simplement. CMake comprendra (en ajoutant le répertoire dans la configuration bien entendu) et le projet est compilable sur les deux OS. Je le faisais avec OpenAWars, mais plus récemment tu as ceci : http://jeux.developpez.com/telecharg...Exemple-de-FBO . Un projet CMake avec les dépendances de définie. Le gars sous Linux, il fait un aptitude/yum/emerge/pacman ou je sais pas quoi qui veut pour installer les bibliothèques en développement voulues. Le gars sous Windows, tout est livré, juste à installer CMake. Dans les deux cas, le projet compile. Windows avec les .DLL/.lib que je livre, Linux avec les .so dans le système.
    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.

  5. #25
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Points : 608
    Points
    608
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Tous les programmeurs ne sont pas sous Linux
    Et il va bien falloir compiler pour Windows vu que généralement, la majorité du public cible s'y trouve...
    "La majorité du public cible s'y trouve", hum... selon le domaine d'application...

    Bref de toute façon je n'ai mentionné que Linux parce que sous Windows ça me semblait plus simple, comme LittleWhite l'a expliqué.

  6. #26
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    @LittleWhite : merci pour ta réponse.
    Il va donc falloir que je me paye la compilation + installation des bibliothèques sous windows moi-même


    Sauf que c'est loin d'être aussi simple que tu le dis car il faut sous Windows fournir les bibliothèques compilée... pour chaque compilateur (et même version de compilateur !)

    En effet, j'ai déjà eu un tel problème en utilisant une version de bibliothèque compilée pour VS alors que j'utilisais mingw32.
    J'ai aussi un ami qui n'arrivais pas à utiliser openCV avec mingw32 parce qu'il avait une version de mingw32 différente...

    Pour les bibliothèques, j'utilise pour le moment :
    - boost
    - Irrlicht 3D
    - openSSL

    Il faut donc que je copie les sources dans un endroit au cas où puis que je créé un petit dossier /usr/include/monProjet où je mette tous mes header et dans /usr/lib/monProjet tous mes .a ?
    C'est à dire utiliser dès maintenant une version "figée" des bibliothèques ?
    Est-ce vraiment recommandable ?
    Faut-il faire de même pour le compilateur ?

    @Joker-eph : au contraire, sous Linux, on a juste un aptitude install à faire, c'est de loin le plus simple.
    Sous Windows, il faut déjà arriver à compiler certaines bibliothèques pour pouvoir les distribuer par le suite

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Il va donc falloir que je me paye la compilation + installation des bibliothèques sous windows moi-même
    Ouep, enfin, toutes bibliothèques n'obligent pas la recompilation. Exemple, la SDL a les binaires tout comme il faut.


    Sauf que c'est loin d'être aussi simple que tu le dis car il faut sous Windows fournir les bibliothèques compilée... pour chaque compilateur (et même version de compilateur !)
    Pour chaque compilateur, oui cela peut être vrai (remarquez que la SDL propose une version MinGW et une version VS).
    Après, comme je l'ai dit, avec un système automatisé, ça peut être facile. Après, on peut toujours faire des contraintes de projet, si nous n'avons pas de supporteurs (dire que le projet est uniquement compatible avec tel compilateur). Sachant que MSVC ne supporte pas complètement le C++11 (pas aussi bien que MinGW, le choix est vite fait ). Et puis, il est moins pénible d'installer un MinGW gratuit qu'un MSVC qui vient uniquement avec un éditeur.

    J'ai aussi un ami qui n'arrivais pas à utiliser openCV avec mingw32 parce qu'il avait une version de mingw32 différente...
    Légèrement étonnant, les incompatibilité des fichiers me semblait surtout exister entre MinGW et MSVC (.a et .lib). Après, cela peut dépendre de commencer est compilé OpenCV aussi.

    Il faut donc que je copie les sources dans un endroit au cas où puis que je créé un petit dossier /usr/include/monProjet où je mette tous mes header et dans /usr/lib/monProjet tous mes .a ?
    En théorie, cela devait déjà être le cas à la création du projet (sauf pour Linux et encore, que si les bibliothèque sont dans les paquets)

    C'est à dire utiliser dès maintenant une version "figée" des bibliothèques ?
    Moi, c'est ce que je conseille, surtout pour des bibliothèques en cours de développement.

    Est-ce vraiment recommandable ?
    Je donne juste des conseils sur des expériences que j'ai eu. Mon cas était un peu étrange, car c'était en D. La bibliothèque OpenGL est porté par des contributeurs et entre deux versions de leurs SVN, ils ont changé la gestion des extensions. Le jour où je suis passé de Linux à Windows, que j'ai récupérer la nouvelle version de la bibliothèque, j'ai eu mal. Pour cela que je conseille de garder une version fixe de la bibliothèque, surtout si celle-ci est en développement (ou beta).

    Faut-il faire de même pour le compilateur ?
    Je doute que vous ne changiez de compilateur en cours de projet et cela même, je n'en vois pas la raison. Et puis, un code bien écrit est sensé compiler avec tous les compilateurs conformes à la norme, non ?


    Une autre possibilité, si vraiment vous êtes parano, c'est de garder les installateurs des compilateurs/bibliothèques dans la version du projet. Je veux dire par là, un dossier bin, qui contient l'installateur de MinGW, les installateurs des bibliothèques, les redistribuables (si besoin) et tout ça. Quelqu'un qui débarque sur le projet, prend le SVN, lance les installateurs et hop, c'est tout ok.
    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.

  8. #28
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Merci pour tes réponses.

    Par contre pour Boost et OpenSLL, c'est une horreur pour le compiler sous Windows...
    ça va représenter pas mal de travail ça

  9. #29
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    J'ai tenté de faire quelques CMakeLists.txt et je reconnais que c'est plutôt simple.
    Par contre pour l'écriture de FindXXX.cmake, je reste encore un peu perdu.
    J'ai regardé le FindSDL.cmake pour m'en inspirer un peu mais il ne semble pas avoir de "sous-modules" comme boost avec system, thread, ...
    De plus, je n'arrive pas à afficher un message si la bibliothèque est trouvée ou non....

    J'ai aussi regardé le FindBoost.cmake ....

    Ci-dessous les deux fichiers que j'ai créé, qu'en pensez-vous ?

    Code CMakeLists.txt : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    cmake_minimum_required(VERSION 2.6)
     
    project(LDDataBase)
     
    find_package ( LD
    		1
    		REQUIRED error )
     
    if( ${LD_FOUND} )
    	MESSAGE( STATUS " Found LD" )
    	#On peut continuer
    else()
    	#On ne continue pas
    	MESSAGE( FATAL_ERROR " LD not Found" )
    endif()
     
    find_package( Boost 
     
            1.46.1
     
            REQUIRED system
    )
     
    set(LIBRARY_OUTPUT_PATH bin/${CMAKE_BUILD_TYPE})
     
    file ( GLOB_RECURSE
     
            source_files
     
            ../src/* )
     
    add_library(
     
            LDdatabase
     
            SHARED
     
            ${source_files}
     
    )
     
    set(CMAKE_CXX_FLAGS "-std=c++11")        ##We use C++11
     
    include_directories(../include ${LD_LIBRARY_DIRS} ${Boost_LIBRARY_DIRS} )
     
    link_directories( ${LD_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS})
     
    target_link_libraries( LDdatabase ${LD_LIBRARIES} ${Boost_LIBRARIES})

    Code FindLD.cmake : 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
    # All rights reserved
    # Official Website : http://jsz.kegtux.org/
     
    find_path( LD_INCLUDE_DIR 
     NAMES exception.h Error_global.h
     HINTS C:/includes/ 
     HINTS /user/include/
     PATH_SUFFIXES LastDungeon
    )
     
    find_library( LD_LIBRARY_DIRS
       NAMES LDerror
       HINTS C:/bin/
       HINTS /user/include/
       PATH_SUFFIXES lib LastDungeon
    )
     
    set( LD_LIBRARIES "LDerror")
     
     
    set(LD_PROCESS_INCLUDES ${LD_INCLUDE_DIRS} )
     
    set(LD_PROCESS_LIBS ${LD_LIBRARIES} )
     
    #libfind_process(LD)

    EDIT : en fait si je n'obtenais rien, c'est que je copiais le mauvais fichier .cmake dans le dossier de Cmake

    Pour le moment ça marche quand il ne trouve pas, je vais tester quand il doit trouver

    Mais je ne vois toujours pas comment ne rechercher que des modules de ma bibliothèque.

  10. #30
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    Citation Envoyé par Neckara Voir le message
    Mais je ne vois toujours pas comment ne rechercher que des modules de ma bibliothèque.
    Quand tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find_package( MaLib COMPONENTS gui core REQUIRED )
    cmake définit la variable MaLib_FIND_COMPONENTS pour ton finder.

    Du coup, pour peu que tu ais pris une convention sur le nom de tes bibliothèques (style MaLib_<composant>), tu t'en sors dans FindMaLib.cmake avec une chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    foreach( MaLib_FIND_COMPONENT ${MaLib_FIND_COMPONENTS} )
    	FIND_LIBRARY(MaLib_${MaLib_FIND_COMPONENT}_LIBRARY
    		NAMES MaLib_${MaLib_FIND_COMPONENT}
    		HINTS ${BASE_HINTS}
    		PATH_SUFFIXES lib64 lib
    		PATHS ${BASE_PATHS}
    	)
    endforeach()

  11. #31
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Merci pour ta réponse.

    J'ai essayé de m'en inspirer mais j'ai maintenant 3 pages de warnings

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    # All rights reserved
    # Official Website : http://jsz.kegtux.org/
     
    foreach( LD_FIND_COMPONENT ${LD_FIND_COMPONENTS} )
    	FIND_LIBRARY(
    		LD${LD_FIND_COMPONENT}_LIBRARY
    		NAMES LD${LD_FIND_COMPONENT}
    		HINTS ${BASE_HINTS}
    		PATH_SUFFIXES LastDungeon lib lib64 .
    		PATHS ${BASE_PATHS} C:/bin/ /usr/lib/
    	)
    endforeach()
     
     
    foreach( LD_FIND_COMPONENT ${ LD_FIND_COMPONENTS} )
    	FIND_LIBRARY(
    		LD${LD_FIND_COMPONENT}_INCLUDE_DIRS
    		NAMES ${LD_FIND_COMPONENT}.h
    		HINTS ${BASE_HINTS}
    		PATH_SUFFIXES LastDungeon include .
    		PATHS ${BASE_PATHS} C:/includes/ /usr/include/
    	)
    endforeach()
     
    foreach( LD_FIND_COMPONENT ${ LD_FIND_COMPONENTS} )
    	set(
    		LD${LD_FIND_COMPONENT}_LIBRARIES
    		LD${LD_FIND_COMPONENT}
    	)
    endforeach()
     
    # set(LD_PROCESS_INCLUDES ${LD_INCLUDE_DIRS} )
    # set(LD_PROCESS_LIBS ${LD_LIBRARIES} )
     
    set( LD_FOUND true)
    foreach( LD_FIND_COMPONENT ${ LD_FIND_COMPONENTS} )
    	if( NOT ${LD${LD_FIND_COMPONENTS}_INCLUDE_DIRS} OR NOT 
    		${LD${LD_FIND_COMPONENTS}_LIBRARIES } )
    		set( LD_FOUND false )
    		set( LD${LD_FIND_COMPONENTS}_FOUND false )
    	else ()
    		set( LD${LD_FIND_COMPONENTS}_FOUND true )
    	endif()
    endforeach()
     
    #libfind_process("LD")
    CMake Warning (dev) at /usr/share/cmake-2.8/Modules/FindLD.cmake:4 (foreach):
    Syntax error in cmake code at

    /usr/share/cmake-2.8/Modules/FindLD.cmake:4

    when parsing string

    ${

    syntax error, unexpected $end, expecting } (2)

    Policy CMP0010 is not set: Bad variable reference syntax is an error. Run
    "cmake --help-policy CMP0010" for policy details. Use the cmake_policy
    command to set the policy and suppress this warning.
    Call Stack (most recent call first):
    CMakeLists.txt:5 (find_package)
    This warning is for project developers. Use -Wno-dev to suppress it.

    CMake Warning (dev) at /usr/share/cmake-2.8/Modules/FindLD.cmake:15 (foreach):
    Syntax error in cmake code at

    /usr/share/cmake-2.8/Modules/FindLD.cmake:15

    when parsing string

    ${

    syntax error, unexpected $end, expecting } (2)

    Policy CMP0010 is not set: Bad variable reference syntax is an error. Run
    "cmake --help-policy CMP0010" for policy details. Use the cmake_policy
    command to set the policy and suppress this warning.
    Call Stack (most recent call first):
    CMakeLists.txt:5 (find_package)
    This warning is for project developers. Use -Wno-dev to suppress it.
    [...]
    EDIT :
    J'ai trouvé l'erreur, il fallait utiliser ${LD_FIND_REQUIRED} et non ${LD_FIND_COMPOMENT}

    Je pense avoir presque fini :
    # All rights reserved
    # Official Website : http://jsz.kegtux.org/

    foreach( LD_FIND_COMPONENT ${LD_FIND_REQUIRED} )
    FIND_LIBRARY(
    LD${LD_FIND_COMPONENT}_LIBRARY
    NAMES LD${LD_FIND_COMPONENT}
    HINTS ${BASE_HINTS}
    PATH_SUFFIXES LastDungeon lib lib64 .
    PATHS ${BASE_PATHS} C:/bin/ /usr/lib/
    )
    if( NOT ${LD_LIBRARY} )
    set( LD_LIBRARY LD${LD_FIND_COMPONENT}_LIBRARY)
    else ()
    set( LD_LIBRARY "$LD_LIBRARY LD${LD_FIND_COMPONENT}_LIBRARY")
    endif()
    endforeach()


    foreach( LD_FIND_COMPONENT ${LD_FIND_REQUIRED} )
    FIND_LIBRARY(
    LD${LD_FIND_COMPONENT}_INCLUDE_DIRS
    NAMES ${LD_FIND_COMPONENT}.h
    HINTS ${BASE_HINTS}
    PATH_SUFFIXES LastDungeon include .
    PATHS ${BASE_PATHS} C:/includes/ /usr/include/
    )
    if( NOT ${LD_INCLUDE_DIRS} )
    set( LD_LIBRARY LD${LD_FIND_COMPONENT}_INCLUDE_DIRS)
    else ()
    set( LD_LIBRARY "$LD_INCLUDE_DIRS LD${LD_FIND_COMPONENT}_INCLUDE_DIRS")
    endif()

    endforeach()

    foreach( LD_FIND_COMPONENT ${LD_FIND_REQUIRED} )
    set(
    LD${LD_FIND_COMPONENT}_LIBRARIES
    LD${LD_FIND_COMPONENT}
    )
    if( NOT ${LD_INCLUDE_DIRS} )
    set( LD_LIBRARY LD${LD_FIND_COMPONENT}_LIBRARIES)
    else ()
    set( LD_LIBRARY "$LD_LIBRARIES LD${LD_FIND_COMPONENT}_LIBRARIES")
    endif()
    endforeach()

    # set(LD_PROCESS_INCLUDES ${LD_INCLUDE_DIRS} )
    # set(LD_PROCESS_LIBS ${LD_LIBRARIES} )

    set(LD_FOUND 1)

  12. #32
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    ${ LD_FIND_COMPONENTS} <= un vilain espace là dedans

    Edit : j'ai lu que le début xD

  13. #33
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Merci pour ta réponse.

    J'ai presque fini, juste un petit problème dans les boucles de recherches, dès qu'un élément est trouvé, il ne va plus modifier la variable pour mettre <var>-NOTFOUND dedans.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    # All rights reserved
    # Official Website : <a href="http://jsz.kegtux.org/" target="_blank">http://jsz.kegtux.org/</a>
     
    set(LD_FOUND 1)
     
    message("Search ${LD_FIND_COMPONENTS} 's LastDungeon" )
     
    set( LD_LIBRARY_DIRS "")
     
    foreach( LD_FIND_COMPONENT ${LD_FIND_COMPONENTS} )
    	FIND_LIBRARY(
    		LD_TEMP_LIBRARY
    		NAMES LD${LD_FIND_COMPONENT}
    		HINTS ${BASE_HINTS}
    		PATH_SUFFIXES LastDungeon lib lib64 .
    		PATHS ${BASE_PATHS} C:/bin/ /usr/lib/
    	)
    	set(LD${LD_FIND_COMPONENT}_LIBRARY ${LD_TEMP_LIBRARY} )
     
    	STRING(COMPARE EQUAL ${LD_TEMP_LIBRARY} "LD_TEMP_LIBRARY-NOTFOUND" RESULT)
     
    	if( ${RESULT} )
    		message(ERROR " : Library LD${LD_FIND_COMPONENT} not found : ${LD_TEMP_LIBRARY}")
    		set(LD_FOUND 0)
    	else ()
    		message("Library LD${LD_FIND_COMPONENT} found : ${LD_TEMP_LIBRARY}")
    	endif()
     
    	set( LD_LIBRARY_DIRS "${LD_LIBRARY_DIRS} ${LD_TEMP_LIBRARY}" )
    endforeach()
     
    set( LD_INCLUDE_DIRS "")
     
    foreach( LD_FIND_COMPONENT ${LD_FIND_COMPONENTS} )
    	FIND_LIBRARY(
    		LD_TEMP_INCLUDE_DIRS
    		NAMES ${LD_FIND_COMPONENT}.h
    		HINTS ${BASE_HINTS}
    		PATH_SUFFIXES LastDungeon include .
    		PATHS ${BASE_PATHS} C:/includes/ /usr/include/
    	)
    	set(LD${LD_FIND_COMPONENT}_INCLUDE_DIRS ${LD_TEMP_INCLUDE_DIRS} )
     
     
    	STRING(COMPARE EQUAL ${LD_TEMP_INCLUDE_DIRS} "LD_TEMP_INCLUDE_DIRS-NOTFOUND" RESULT)
     
    	if( ${RESULT} )
    		set(LD_FOUND 0)
    		message(ERROR " : Header ${LD_FIND_COMPONENT}.h not found : ${LD_TEMP_INCLUDE_DIRS}")
    	else ()
    		message("Header ${LD_FIND_COMPONENT}.h found : ${LD_TEMP_INCLUDE_DIRS}")
    	endif()
     
    	set( LD_INCLUDE_DIRS "${LD_INCLUDE_DIRS} ${LD_TEMP_INCLUDE_DIRS}")
    endforeach()
     
    set( LD_LIBRARIES "")
     
    foreach( LD_FIND_COMPONENT ${LD_FIND_COMPONENTS} )
    	set(
    		LD${LD_FIND_COMPONENT}_LIBRARIES
    		LD${LD_FIND_COMPONENT}
    	)
    	set( LD_LIBRARIES "${LD_LIBRARIES} LD${LD_FIND_COMPONENT}")
    endforeach()

  14. #34
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Problème résolu, le cache de Cmake me jouais un mauvais tour...

    J'ai juste un dernier détail à régler :
    J'arrive à obtenir les chemins vers les bibliothèques ainsi que les dossiers contenant les headers.
    Par contre je n'arrive pas à obtenir les dossiers contenant les bibliothèques.
    Est-ce vraiment utile de les chercher ou est-ce qu'on peut parfaitement faire sans ?

    Pour ceux que cela pourrait intéresser :
    Code FindLD.cmake : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    # All rights reserved
    # Official Website : http://jsz.kegtux.org/
     
    set(LD_FOUND 1)
     
    message("Search ${LD_FIND_COMPONENTS} 's LastDungeon" )
     
    set( LD_LIBRARY_DIRS "")
    set( LD_LIBRARIES "")
     
    foreach( LD_FIND_COMPONENT ${LD_FIND_COMPONENTS} )
    	FIND_LIBRARY(
    		LD${LD_FIND_COMPONENT}_LIBRARIES
    		NAMES LD${LD_FIND_COMPONENT}
    		HINTS ${BASE_HINTS}
    		PATH_SUFFIXES LastDungeon lib lib64 .
    		PATHS ${BASE_PATHS} C:/bin/ /usr/lib/
    	)
    	set(LD_TEMP_LIBRARY "${LD${LD_FIND_COMPONENT}_LIBRARIES}")
     
    	STRING(COMPARE EQUAL "${LD_TEMP_LIBRARY}" "LD${LD_FIND_COMPONENT}_LIBRARIES-NOTFOUND" RESULT)
     
    	if( ${RESULT} )
    		message(ERROR " : Library LD${LD_FIND_COMPONENT} not found : ${LD_TEMP_LIBRARY}")
    		set(LD_FOUND 0)
    	else ()
    		message("Library LD${LD_FIND_COMPONENT} found : ${LD_TEMP_LIBRARY}")
    	endif()
     
    	set( LD_LIBRARY_DIRS "${LD_LIBRARY_DIRS};${LD_TEMP_LIBRARY}" ) # problème, il faut le chemin du dossier ?
    	set( LD${LD_FIND_COMPONENT}_LIBRARY_DIRS ${LD_TEMP_LIBRARY}) #idem
    	message("test :" ${LD_LIBRARY_DIRS})
     
    	#chemin des .so
    	set( LD_LIBRARIES "${LD_LIBRARIES};${LD${LD_FIND_COMPONENT}_LIBRARIES}" )
     
    endforeach()
     
    set( LD_INCLUDE_DIRS "")
     
    foreach( LD_FIND_COMPONENT ${LD_FIND_COMPONENTS} )
     
    	FIND_PATH(
    		LD${LD_FIND_COMPONENT}_INCLUDE_DIRS
    		NAMES LastDungeon/${LD_FIND_COMPONENT}.h
    		HINTS ${BASE_HINTS}
    		PATH_SUFFIXES LastDungeon include .
    		PATHS ${BASE_PATHS} C:/includes/ /usr/include/
    	)
    	set(LD_TEMP_INCLUDE_DIRS "${LD${LD_FIND_COMPONENT}_INCLUDE_DIRS}")
     
    	STRING(COMPARE EQUAL "A${LD_TEMP_INCLUDE_DIRS}" "ALD${LD_FIND_COMPONENT}_INCLUDE_DIRS-NOTFOUND" RESULT)
     
    	if( ${RESULT} )
    		set(LD_FOUND 0)
    		message(ERROR " : Header ${LD_FIND_COMPONENT}.h not found : ${LD_TEMP_INCLUDE_DIRS}")
    	else ()
    		message("Header ${LD_FIND_COMPONENT}.h found : ${LD_TEMP_INCLUDE_DIRS}")
    	endif()
     
    	set( LD_INCLUDE_DIRS "${LD_INCLUDE_DIRS} ${LD_TEMP_INCLUDE_DIRS}")
    endforeach()
     
    #set( LD_LIBRARIES "")
     
    #foreach( LD_FIND_COMPONENT ${LD_FIND_COMPONENTS} )
    #	set(
    #		LD${LD_FIND_COMPONENT}_LIBRARIES
    #		LD${LD_FIND_COMPONENT}
    #	)
    #	set( LD_LIBRARIES "${LD_LIBRARIES};LD${LD_FIND_COMPONENT}")
    #endforeach()

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    cmake_minimum_required(VERSION 2.6)
     
    project(LDDataBase)
     
    set( CMAKE_MODULE_PATH ".;${CMAKE_MODULE_PATH}" )
     
    find_package ( LD COMPONENTS erreur)
     
    if( ${LD_FOUND} )
    	MESSAGE( STATUS " Found LD" )
    	#On peut continuer
    else()
    	#On ne continue pas
    	MESSAGE( FATAL_ERROR " LD not Found" )
    endif()
     
    find_package( Boost 
     
            1.46.1
     
            REQUIRED system
    )
     
    set(LIBRARY_OUTPUT_PATH bin/${CMAKE_BUILD_TYPE})
     
    file ( GLOB_RECURSE
     
            source_files
     
            ../src/* )
     
    add_library(
     
            LDdatabase
     
            SHARED
     
            ${source_files}
     
    )
     
    set(CMAKE_CXX_FLAGS "-std=c++11")        ##We use C++11
     
    include_directories(../include ${LD_INCLUDE_DIRS} {Boost_INCLUDE_DIRS} )
     
    link_directories( ${LD_LIBRARY_DIRS} ${Boost_LIBRARY_DIRS} )
     
    target_link_libraries( LDdatabase ${LD_LIBRARIES} ${Boost_LIBRARIES})

  15. #35
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonsoir,

    Citation Envoyé par Neckara Voir le message
    Par contre je n'arrive pas à obtenir les dossiers contenant les bibliothèques.
    Est-ce vraiment utile de les chercher ou est-ce qu'on peut parfaitement faire sans ?
    Sachant que find_library renvoie des chemins complets, tes utilisateurs n'auront pas besoin de faire des "link_directories" donc tu peux te passer de LD_LIBRARY_DIRS.

    Ceci dit, tu pourrais les obtenir avec "get_filename_component".

  16. #36
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par bretus Voir le message
    Bonsoir,



    Sachant que find_library renvoie des chemins complets, tes utilisateurs n'auront pas besoin de faire des "link_directories" donc tu peux te passer de LD_LIBRARY_DIRS.

    Ceci dit, tu pourrais les obtenir avec "get_filename_component".
    Merci, cela marche parfaitement avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GET_FILENAME_COMPONENT(var
    				$ {file}
                                    PATH )
    .

    Merci pour votre aide, je passe le sujet en résolu.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Quel outil pour diagrame UML pour Java ?
    Par yup dans le forum Outils
    Réponses: 5
    Dernier message: 27/08/2004, 16h24
  2. [Revue de code] Quels outils pour de grosses applis?
    Par franckR dans le forum Choisir un environnement de développement
    Réponses: 1
    Dernier message: 21/03/2004, 10h03
  3. Quel Outil pour les applis Industrielles ET bases de données
    Par ThierryAIM dans le forum Débats sur le développement - Le Best Of
    Réponses: 8
    Dernier message: 23/04/2003, 09h14
  4. Quel outil pour du développement Client/Serveur (Win XP) ?
    Par jey_bonnet dans le forum Débats sur le développement - Le Best Of
    Réponses: 5
    Dernier message: 02/11/2002, 14h57

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