Comment utiliser CMAKE_INSTALL_PREFIX

Je veux générer un fichier Makefile avec la cible d’installation, ce qui rend l’installation dans / usr au lieu de / usr / local par défaut. En supposant que ce répertoire de compilation est fait dans le sous-répertoire source, j’exécute:

cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

CMakeCache.txt contient: CMAKE_INSTALL_PREFIX:PATH=/usr (OK?)

Maintenant j’exécute:

 faire
 faire installer

Tous les fichiers sont toujours installés sur usr / local. Qu’est-ce qui ne va pas?

Modifier: il n’y a pas de CMAKE_INSTALL_PREFIX dans les fichiers de projet CMakeLists.txt. Avant de lancer cmake, je supprime tout dans le répertoire de sortie. les directives d’installation de CMakeLists.txt ressemblent à:

install(TARGETS mylibrary DESTINATION lib)

Cela devrait être (voir les docs ):

 cmake -DCMAKE_INSTALL_PREFIX=/usr .. 

Il y a deux façons d’utiliser cette variable:

  • le passer comme argument de ligne de commande comme Job mentionné:

    cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..

  • lui atsortingbuer une valeur dans CMakeLists.txt :

    SET(CMAKE_INSTALL_PREFIX < install_path >)

    Mais rappelez-vous de placer la commande BEFORE PROJECT(< project_name>) , sinon cela ne fonctionnera pas!

Mais rappelez-vous de placer la commande BEFORE PROJECT (), sinon cela ne fonctionnera pas!

Ma première semaine d’utilisation de cmake – après quelques années d’autotools GNU – je continue donc d’apprendre (mieux que d’écrire des macros M4), mais je pense que la modification de CMAKE_INSTALL_PREFIX après la définition du projet est le meilleur endroit.

CMakeLists.txt

 cmake_minimum_required (VERSION 2.8) set (CMAKE_INSTALL_PREFIX /foo/bar/bubba) message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba") project (BarkBark) message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba") set (CMAKE_INSTALL_PREFIX /foo/bar/bubba) message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba") 

Première exécution (pas de cache)

 CIP = /foo/bar/bubba (should be /foo/bar/bubba -- The C comstackr identification is GNU 4.4.7 -- etc, etc,... CIP = /usr/local (should be /foo/bar/bubba CIP = /foo/bar/bubba (should be /foo/bar/bubba -- Configuring done -- Generating done 

Deuxième tour

 CIP = /foo/bar/bubba (should be /foo/bar/bubba CIP = /foo/bar/bubba (should be /foo/bar/bubba CIP = /foo/bar/bubba (should be /foo/bar/bubba -- Configuring done -- Generating done 

Faites-moi savoir si je me trompe, j’ai beaucoup à apprendre à faire. C’est marrant.