2015-04-09 9 views
12

Non capisco l'utilizzo di INSTALL_DIR nel comando ExternalProject_Add. Provo ad usarlo ma non sembra funzionare. Ecco un esempio di una CMakeLists.txt, utilizzando biblioteca Eigen che compila velocemente:Che cosa è utile INSTALL_DIR nel comando ExternalProject_Add?

cmake_minimum_required (VERSION 2.6) 
project (example CXX) 
include(ExternalProject) 
include(ProcessorCount) 
set(CMAKE_VERBOSE_MAKEFILE ON) 
ProcessorCount(N) 
if(NOT N EQUAL 0) 
    set(CMAKE_BUILD_FLAGS -j${N}) 
endif() 
ExternalProject_Add 
(
    mylib 
    PREFIX myprefix 
    DOWNLOAD_COMMAND wget http://bitbucket.org/eigen/eigen/get/3.2.4.tar.gz && tar xvzf 3.2.4.tar.gz -C mylib --strip-components=1 
) 

ho scelto la gerarchia seguente progetto:

project 
    CMakeLists.txt 
    build/ 

dal repository di compilazione, digito:

cmake .. 
make 

Il processo di installazione non riesce con il seguente messaggio:

Il file

non può creare la directory:/usr/local/include/eigen3.
Forse hanno bisogno di privilegi amministrativi.

Per quanto ho capito, significa che ho bisogno di definire un "prefisso" durante la fase di configurazione:

cmake -D CMAKE_INSTALL_PREFIX=$INSTALL_DIR .. 

Ma, la variabile INSTALL_DIR è già definita nel comando ExternalProject_Add. Tuttavia, ottengo lo stesso errore quando modifico il valore di INSTALL_DIR aggiungendo

INSTALL_DIR myprefix/src/install 

nel comando ExternalProject_Add.

Quindi, a cosa serve INSTALL_DIR? Cosa sto sbagliando?

Naturalmente, so come fornire il mio comando di configurazione per aggiungere un prefisso e risolvere il problema. Ma non è una mia domanda. La mia domanda è: se devo farlo, qual è lo scopo di INSTALL_DIR?

+0

'cmake -D CMAKE_INSTALL_PREFIX = $ INSTALL_DIR ..' Qui si sta inserendo una variabile d'ambiente dalla shell non una variabile CMake. – drescherjm

+0

Sì, lo so. Volevo solo dire che il problema deriva dalla fase di configurazione. – Aleph

risposta

7

Da quello che ho trovato in questa discussione https://www.mail-archive.com/[email protected]/msg51663.html (scorrere fino alla fine della pagina per navigare attraverso i messaggi di thread) è davvero cosa abbastanza comune utilizzare CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/contrib

Inoltre, in agguato attraverso il modulo ExternalProject.cmake ho scoperto che l'unico effetto di questa directory è che CMake creerà la directory specificata in INSTALL_DIR prima di fare qualsiasi altra cosa.

Inoltre, imposterà la proprietà che è possibile raccogliere tramite il comando ExternalProject_Get_Property(${project_name} install_dir).

E questo è praticamente tutto.

// A partire dalla versione 3.2.2 CMake