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 :

Question répertoires destinations cmake


Sujet :

Systèmes de compilation

  1. #1
    Membre éclairé
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    593
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 593
    Par défaut Question répertoires destinations cmake
    Bonjour,

    Voila, j'ai récupérer un petit projet fait en c++ utilisant cmake (que je découvre).
    Tous compile bien nickel, seulement je voudrais juste changer le répertoire de destination des binaires fraichement compiler.

    Je pensais le faire en spécifiant le repertoire de destination avec la variable CMAKE_BINARY_DIR lors de l'appelle à cmake:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cmake . -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_BINARY_DIR=/home/bloodaxe/libclaw/bin
    Mais ca ne change rien. Dans les makefile générer j'ai toujours l'ancien dossier de destination.

    Si quelqu'un a une idée, ou une piste merci.

    Pour info, je suis Linux.

    PS: Si je ne suis pas dans le bon forum excusez-moi.

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    CMAKE_BINARY_DIR permet d'indiquer où générer les binaires mais pas où les installer.

    Par défaut, il n'est possible de changer les répertoires d'installation avec CMake. Tu peux uniquement changer le préfixe.

    Pourquoi ne fais-tu pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cmake . -DCMAKE_INSTALL_PREFIX=/home/bloodaxe/libclaw

  3. #3
    Membre éclairé
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    593
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 593
    Par défaut
    Salut,

    Ca ne marche pas :-(.

    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 . -DCMAKE_INSTALL_PREFIX=/home/bloodaxe/libclaw/debian
    -- Check for working C compiler: /usr/bin/gcc
    -- Check for working C compiler: /usr/bin/gcc -- works
    -- Check size of void*
    -- Check size of void* - done
    -- Check for working CXX compiler: /usr/bin/c++
    -- Check for working CXX compiler: /usr/bin/c++ -- works
    -- Found JPEG: /usr/lib/libjpeg.so
    -- Found ZLIB: /usr/lib/libz.so
    -- Found PNG: /usr/lib/libpng.so
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/bloodaxe/libclaw/debian
    Mais j'ai toujours le mauvais chemin dans les makefiles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    grep /home/blood Makefile 
    CMAKE_SOURCE_DIR = /home/bloodaxe/libclaw/
    CMAKE_BINARY_DIR = /home/bloodaxe/libclaw/
    En faites je veux juste générer les binaires dans /home/bloodaxe/libclaw/debian.

    J'ai essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cmake . -DCMAKE_BINARY_DIR:PATH=/home/bloodaxe/libclaw/debian
    Rien a faire il me les génére toujours dans /home/bloodaxe/libclaw/
    Dans le makefile ca reste toujours possitionner sur ce chemin.

    :'(

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Tous compile bien nickel, seulement je voudrais juste changer le répertoire de destination des binaires fraichement compiler.
    J'ai mal interprété cette phrase. Que veux-tu ?

    Générer, à la compilation, les binaires dans un répertoire particulier. Dans ce cas-là, il faut modifier la variable EXECUTABLE_OUTPUT_PATH (RUNTIME_OUTPUT_DIRECTORY avec CMake 2.6).

    Ou spécifier un répertoire d'installation pour les binaires. Sauf ci cela a été prévu, la seule chose qui peut-être modifiée par l'utilisateur est le préfixe (variable CMAKE_INSTALL_PREFIX).

    Les variables CMAKE_SOURCE_DIR et CMAKE_BINARY_DIR sont des variables en lecture seule.

  5. #5
    Membre éclairé
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    593
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 593
    Par défaut
    En faite pour l'instant lorsque je lance la compilation via make, les binaires sont générer dans /home/bloodaxe/libclaw/. Moi je voudrais qu'ils soient dans /home/bloodaxe/libclaw/debian.

    J'utilise cmake 2.4.8-1.1.

    J'ai essayer avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cmake . -DEXECUTABLE_OUTPUT_PATH:PATH=/home/bloodaxe/libclaw/debian
    idem avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cmake . -DCMAKE_INSTALL_PREFIX:PATH=home/bloodaxe/libclaw/debian
    Le make me génére toujours les binaires dans /home/bloodaxe/libclaw/.

    PS: C'est des librairies que le make génère, je pense pas que ca change quelquechose, mais sait-on jamais.

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Citation Envoyé par Blo0d4x3 Voir le message
    PS: C'est des librairies que le make génère, je pense pas que ca change quelquechose, mais sait-on jamais.
    Ah si ça change quelque chose. La variable est LIBRARY_OUTPUT_PATH.

  7. #7
    Membre éclairé
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    593
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 593
    Par défaut
    Nickel ca marche :-D.

    Merci bien.

  8. #8
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut
    Salut,
    je suis débutant en ce qui concerne le système de construction logiciel.
    J'aimerais savoir ce que fait -DCMAKE_INSTALL_PREFIX:PATH dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     cmake . -DCMAKE_INSTALL_PREFIX:PATH=home/bloodaxe/libclaw/debian
    1) le . indique le repertoire courant dans lequel le cmake doit cherche CMakeLists.txt si j'ai bien compris
    2) quand je fais man cache --help pour savoir que fait le -D devant CMAKE_INSTALL_PREFIX:PATH il me dit "-D Create a cmake cache entry." Est ce que c'est lui qui crée/génère CMakeCache.txt ?
    3) dans le code que j'ai repris, j'ai un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmake . -DCMAKE_INSTALL_PREFIX=~/work
    le <type> PATH n'est pas dans l'expression ... est ce normal ?

    Merci d'avance.

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    1) le . indique le repertoire courant dans lequel le cmake doit cherche CMakeLists.txt si j'ai bien compris
    Oui ou dans le répertoire des sources si cmake a déjà été lancé une fois. On peut ainsi faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmake </répertoire/des/sources>
    puis une fois que CMake sait où sont les sources. Le répertoire des sources peut éventuellement être . (dans ce cas, on parle de build in-source, en opposition à out-of-source)

    2) quand je fais man cache --help pour savoir que fait le -D devant CMAKE_INSTALL_PREFIXATH il me dit "-D Create a cmake cache entry." Est ce que c'est lui qui crée/génère CMakeCache.txt ?
    Tout à fait.

    3) dans le code que j'ai repris, j'ai un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmake . -DCMAKE_INSTALL_PREFIX=~/work
    le <type> PATH n'est pas dans l'expression ... est ce normal ?
    Oui. Il n'est pas obligatoire de spécifier le type puisque le type de la variable est généralement connu de CMake. Le type n'est utile que pour spécifier à l'IHM comment éditer la variable en question. Dans le cas d'un PATH, il s'agira d'un sélecteur de répertoires.

  10. #10
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut
    En fait je ne vois pas ce que fait concrètement CMAKE_INSTALL_PREFIX

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    La production d'un logiciel sous CMake, et de manière générale, la plupart des productions logicielles, organisent les fichiers en trois arbres :
    • Un arbre des sources, qui contient l'ensemble des sources du logiciel
    • Un arbre de compilation, où sont placés l'ensemble des résultats de la compilation (binaire, fichiers générés...)
    • Un arbre d'installation, qui contient le résultat final (un répertoire pour les binaires, un pour les librairies, un pour la documentation...)


    La variable CMAKE_INSTALL_PREFIX permet de spécifier le chemin de l'arbre d'installation, autrement dit de spécifier le répertoire où le logiciel sera définitivement installé.

  12. #12
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut
    D'acc, j'ai encore quelques petites questions qui me titillent :
    1) pourquoi -D et CMAKE_INSTALL_PREFIX sont collés ...
    2) la combinaison des deux veut dire alors : j'installe CMakeCache.txt ainsi que les binaires dans ~/work ?
    Ce que je comprends pas c'est que CMakeCache ne se trouve pas directement dans ~/work mais dans ~/work/build/my_stack/. Comment cmake peut - il deviner que ca doit etre dans ~/work/build/my_stack/ qu'il faut mettre CMakeCache ? Pour info : je lance ma commande dans ~/work/build/my_stack/ . Mon arbre est organisé comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    work/
        my_stack/
        my_lib/
        my_test/
        build/
            my_stack/
            my_lib/
            my_test/
    et en fait, ce que j'ai tapé réellement dans la console c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmake ../../my_stack -DCMAKE_INSTALL_PREFIX=~/work

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    pourquoi -D et CMAKE_INSTALL_PREFIX sont collés ...
    Je n'ai pas de CMake sous la main mais je crois qu'on peut les décoller, si c'est ça qui te gène.


    la combinaison des deux veut dire alors : j'installe CMakeCache.txt ainsi que les binaires dans ~/work ?
    On va reprendre car il y a confusion dans les termes.

    Quand tu lances la ligne de commande suivante (j'ai préféré inverser les arguments)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmake -DCMAKE_INSTALL_PREFIX=~/work ../../my_stack
    tu indiques à CMake que les sources sont dans ../../my_stack, autrement dit ~/work/my_stack et qu'il doit compiler le projet dans le répertoire courant, donc dans ton cas ~/work/build/my_stack/. C'est la place du CMakeCache.txt mais on ne peut pas dire qu'il est installé dans ce répertoire. Une fois que tu auras compilé ton projet (avec make je suppose), tu peux ensuite l'installer dans le répertoire spécifié par CMAKE_INSTALL_PREFIX.

    Si on reprend ton arborescence, on a donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    work/                   <-- répertoire d'installation
        my_stack/        <-- répertoire où sont les sources
        my_lib/             <-- je suppose sous répertoire my_lib du répertoire d'installation
        my_test/          <-- je suppose sous répertoire my_test du répertoire d'installation
        build/
            my_stack/    <-- répertoire de compilation
            my_lib/        <-- me parait inutile
            my_test/     <-- me parait inutile
    Généralement, on procède ainsi. Supposons que j'ai un répertoire srcdir avec mes sources. Je vais compiler les sources dans le répertoire srcdir/build et les installer dans le répertoire installdir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    cd srcdir
    mkdir build
    cd build
    cmake -DCMAKE_INSTALL_PREFIX=installdir ..
    make
    make test   # passage des tests
    make install # les binaires sont installés dans installdir
    make clean # les produits de compilation (.o, fichiers générés...) sont supprimés de srcdir/build
    Maintenant, peut-être que tu ne veux pas installer les binaires mais juste préciser où les générer ? Dans ce cas, regarde EXECUTABLE_OUTPUT_PATH et LIBRARY_OUTPUT_PATH.

  14. #14
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut
    Citation Envoyé par aoyou Voir le message
    Quand tu lances la ligne de commande suivante (j'ai préféré inverser les arguments)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmake -DCMAKE_INSTALL_PREFIX=~/work ../../my_stack
    tu indiques à CMake que les sources sont dans ../../my_stack, autrement dit ~/work/my_stack et qu'il doit compiler le projet dans le répertoire courant, donc dans ton cas ~/work/build/my_stack/. C'est la place du CMakeCache.txt mais on ne peut pas dire qu'il est installé dans ce répertoire. Une fois que tu auras compilé ton projet (avec make je suppose), tu peux ensuite l'installer dans le répertoire spécifié par CMAKE_INSTALL_PREFIX.
    1) Je n'ai pas compris ce qui est en rouge. le -D génère CMakeCache dans le repertoire courant non ? Je n'ai pas compris le sens du mot installé dans la phrase en rouge. Pourquoi on installer un CMakeCache.txt ?
    2) Dans la phrase en bleu, je n'ai pas compris non plus. toute est confuse pour moi. On installe les binaires non ? pourquoi tu parles encore de CMakeCache.txt

    3) après un make install, le binaire executable de my_stack n'est pas installé dans ~work/ mais dans ~work/build/my_stack/

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    J'ai l'impression qu'on ne se comprend pas sur le mot "installer".
    Une fois que tu as compilé maintes et maintes fois un produit, tu peux l'installer dans un répertoire, genre "Program Files" sous Windows, /usr/local sous Unix.

    Il y a un endroit où tu compiles, il y a un endroit où tu installes... L'installation n'est pas obligatoire.


    1) Je n'ai pas compris ce qui est en rouge. le -D génère CMakeCache dans le repertoire courant non ? Je n'ai pas compris le sens du mot installé dans la phrase en rouge. Pourquoi on installer un CMakeCache.txt ?
    Aucune rapport. Tu a un CMakeCache dans le répertoire courant car tu lances CMake dans le répertoire courant. Ce répertoire courant est le répertoire où tu compiles. Je n'ai jamais dit qu'on installait le CMakeCache.txt. Le CMakeCache est attaché au répertoire de compilation.

    2) Dans la phrase en bleu, je n'ai pas compris non plus. toute est confuse pour moi. On installe les binaires non ? pourquoi tu parles encore de CMakeCache.txt
    Aucun rapport entre CMAKE_INSTALL_PREFIX et CMakeCache.txt.

    3) après un make install, le binaire executable de my_stack n'est pas installé dans ~work/ mais dans ~work/build/my_stack/
    Normal, c'est le résultat de ta compilation. Tes binaires sont dans le répertoire courant de compilation. Une fois que tu installes, les binaires sont copiés dans le répertoire d'installation.

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

Discussions similaires

  1. [Upload] upload et répertoire destination
    Par bernard26000 dans le forum Langage
    Réponses: 1
    Dernier message: 24/02/2008, 01h01
  2. [CKEditor] [Upload] Upload > répertoire de destination
    Par kweb13 dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 05/10/2007, 12h27
  3. Réponses: 1
    Dernier message: 21/01/2007, 01h09
  4. Réponses: 10
    Dernier message: 15/01/2007, 09h17
  5. Question CFileDialog et répertoires
    Par cjacquel dans le forum MFC
    Réponses: 2
    Dernier message: 26/12/2006, 15h48

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