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 :

CMake - Link de librairies


Sujet :

Systèmes de compilation

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut CMake - Link de librairies
    Bonjour a tous.

    Je suis nouveau a cmake, et malgres des heures (litteralement) a chercher sur le net francophone et anglophone, je ne trouve pas de solution a mon probleme.... pourtant simple

    je dois merger plusieurs bouts de code realises par differentes personnes en un seul projet, utilisant CMAKE.
    Dans l'un des makefile "a merger", j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TARTINE_INCL = /home/me/lib_tartine/include
    TARTINE_LIB = -L/home/me/lib -ltata -ltoto -ltutu
    all: hello
    hello: hello.cpp
        gcc -I$(TARTINE_INCL) -o hello hello.cpp $(TARTINE_LIB)
    Jusque la, pas de soucis (pas de CMAKE non plus...). J'ai donc edite mon CMAKE ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SET(TARTINE "/home/me/lib_tartine") 
    INCLUDE_DIRECTORIES(${TARTINE}/include)
    LINK_DIRECTORIES(${TARTINE}/lib)
    TARGET_LINK_LIBRARIES( #tout un tas de trucs preexistants
                         ${TARTINE}/lib)
    Cependant, j'ai des erreurs de "Undefined reference to ...." lorsque j'utilise les objets de Tartine.
    J'en deduis que mon include est bien fait, mais pas mon link...
    Merci d'avance,
    m3d

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET(TARTINE "/home/me/lib_tartine")
    Un CMakeLists doit être indépendant de tout chemin en dur. La variable CMake qui va bien est CMAKE_CURRENT_SOURCE_DIR (ou PROJECT_SOURCE_DIR ou CMAKE_SOURCE_DIR).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INCLUDE_DIRECTORIES(${TARTINE}/include)
    INCLUDE_DIRECTORIES(include) est suffisant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LINK_DIRECTORIES(${TARTINE}/lib)
    Je n'en comprends pas l'intérêt. LINK_DIRECTORIES permet de spécifier un répertoire où se trouve des librairies.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TARGET_LINK_LIBRARIES( #tout un tas de trucs preexistants ${TARTINE}/lib)
    ??? Je ne vois pas la ligne qui indique qu'on construit une librairie. TARGET_LINK_LIBRARIES permet de spécifier contre quelles librairies doit être linké une librairie ou un exécutable.


    Si je reprends ton Makefile, cela donnerait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    cmake_minimum_required(VERSION 2.4)
     
    project(hello)
     
    add_subdirectory(tata) # Je suppose que ces librairies sont dans des sous-Makefiles 
    add_subdirectory(toto)
    add_subdirectory(tutu)
     
    include_directories(include)
     
    add_executable(hello hello.cpp)
     
    target_link_libraries(hello tata toto tutu)
    et on aurait dans tata/, toto/ ou tutu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    add_library(tata <liste des sources de tata>)
     
    # et éventuellement,
    target_link_libraries(tata <liste de librairies contre lesquels tata doit être linké>)
    et ainsi de suite...

Discussions similaires

  1. erreur de compilation - link avec librairie
    Par epmenard dans le forum C++
    Réponses: 1
    Dernier message: 13/12/2011, 07h08
  2. cmake & linking objects
    Par Invité dans le forum Systèmes de compilation
    Réponses: 3
    Dernier message: 12/05/2011, 10h22
  3. Problème de link des librairies de Boost
    Par vanitom dans le forum Boost
    Réponses: 24
    Dernier message: 08/05/2009, 12h47
  4. Génération de code et link de librairie
    Par peter3000 dans le forum Simulink
    Réponses: 0
    Dernier message: 31/12/2008, 15h23
  5. Réponses: 2
    Dernier message: 19/08/2005, 16h02

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