web-dev-qa-db-fra.com

Comment utiliser CMAKE_INSTALL_PREFIX

Je veux générer un fichier Makefile avec la cible d'installation, rendant l'installation dans/usr au lieu de/usr/local par défaut. En supposant que le répertoire de construction 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:

 fabrique 
 fabrique installe 

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

Edit: Il n'y a pas de CMAKE_INSTALL_PREFIX dans les fichiers de projet CMakeLists.txt. Avant d'exécuter cmake, je supprime tout du répertoire de sortie. Les directives d'installation dans CMakeLists.txt ressemblent à ceci:

install(TARGETS mylibrary DESTINATION lib)

82
Alex F

Cela devrait être (voir le docs ):

cmake -DCMAKE_INSTALL_PREFIX=/usr ..
107
Job

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

  • en le passant comme un argument de ligne de commande, exactement comme le mentionnait Job:

    cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..

  • lui attribuant une valeur dans CMakeLists.txt:

    SET(CMAKE_INSTALL_PREFIX < install_path >)

    Mais rappelez-vous de le placer AVANTPROJECT(< project_name>) commande, sinon cela ne fonctionnera pas!

21
ryan_tu

Mais souvenez-vous de la placer AVANT la commande PROJECT (<nom_projet>), sinon cela ne fonctionnera pas!

Ma première semaine d'utilisation de cmake - après quelques années de GNU autotools - j'apprends toujours (mieux que d'écrire des macros m4)], mais je pense modifier CMAKE_INSTALL_PREFIX après paramètre le 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 compiler 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 manche

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

Dites-moi si je me trompe, j'ai beaucoup à apprendre. C'est marrant.

5
Jim