Come utilizzare CMAKE_INSTALL_PREFIX


97

Voglio generare Makefile con la destinazione di installazione, effettuando l'installazione su / usr invece che su / usr / local di default. Supponendo che la directory di compilazione sia eseguita nella sottodirectory sorgente, eseguo:

cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

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

Adesso eseguo:

rendere
fare installazione

Tutti i file sono ancora installati su usr / local. Che c'è?

Modifica: non è presente CMAKE_INSTALL_PREFIX in nessuno dei file di progetto CMakeLists.txt. Prima di eseguire cmake, cancello tutto dalla directory di output. le direttive di installazione in CMakeLists.txt hanno il seguente aspetto:

install(TARGETS mylibrary DESTINATION lib)

Risposte:



30

Esistono due modi per utilizzare questa variabile:

  • passandolo come argomento della riga di comando proprio come ha menzionato Giobbe:

    cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..

  • assegnandogli valore in CMakeLists.txt:

    SET(CMAKE_INSTALL_PREFIX < install_path >)

    Ma ricordati di posizionarlo PRIMA del PROJECT(< project_name>) comando, altrimenti non funzionerà!


4
Strano, l'istruzione SET () funziona per me solo se la metto DOPO l'istruzione PROJECT () (CMake 2.8).
AstroFloyd

2
Questa risposta e il riferimento a cui si collega più direttamente discutono il problema del comando prima / dopo il progetto ().
Craig Scott

Cos'è questo PROJECTcomando e come avere questa cmakeopzione prima di esso? Avresti un esempio?
Stephane

6

Ma ricordati di metterlo PRIMA del comando PROJECT (<nome_progetto>), altrimenti non funzionerà!

La mia prima settimana di utilizzo di cmake - dopo alcuni anni di autotools GNU - quindi sto ancora imparando (meglio che scrivere macro m4), ma penso che modificare CMAKE_INSTALL_PREFIX dopo aver impostato il progetto sia il posto migliore.

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")

Prima esecuzione (nessuna 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

Seconda 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

Fammi sapere se mi sbaglio, ho molto da imparare. È divertente.


Prova a usare FORCE quando esegui SET: set (CMAKE_INSTALL_PREFIX / foo / bar / bubba CACHE PATH "Cmake prefix" FORCE)
Jav_Rock
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.