Cómo usar CMAKE_INSTALL_PREFIX

97

Quiero generar Makefile con el destino de instalación, haciendo la instalación en / usr en lugar de / usr / local predeterminado. Suponiendo que el directorio de compilación se realiza en el subdirectorio de origen, ejecuto:

cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

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

Ahora ejecuto:

hacer
hacer instalar

Todos los archivos todavía están instalados en usr / local. ¿Qué está mal?

Editar: No hay CMAKE_INSTALL_PREFIX en ninguno de los archivos de proyecto CMakeLists.txt. Antes de ejecutar cmake, elimino todo del directorio de salida. instalar directivas en CMakeLists.txt se ve así:

install(TARGETS mylibrary DESTINATION lib)

Alex F
fuente

Respuestas:

120

Eso debería ser (ver los documentos ):

cmake -DCMAKE_INSTALL_PREFIX=/usr ..
Trabajo
fuente
30

Hay dos formas de utilizar esta variable:

  • pasándolo como un argumento de línea de comando como Job mencionó:

    cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..

  • asignándole valor en CMakeLists.txt:

    SET(CMAKE_INSTALL_PREFIX < install_path >)

    ¡Pero recuerde colocarlo ANTES del PROJECT(< project_name>) comando, de lo contrario no funcionará!

ryan_tu
fuente
4
Extraño, la declaración SET () funciona para mí solo si la coloco DESPUÉS de la declaración PROJECT () (CMake 2.8).
AstroFloyd
2
Esta respuesta y la referencia a la que se vincula discuten más directamente el problema del comando antes / después del proyecto ().
Craig Scott
¿Qué es este PROJECTcomando y cómo tener esta cmakeopción antes? ¿Tendrías un ejemplo?
Stephane
6

Pero recuerde colocarlo ANTES del comando PROJECT (<project_name>), de lo contrario, no funcionará.

Mi primera semana de uso de cmake, después de algunos años de herramientas automáticas GNU, todavía estoy aprendiendo (mejor que escribir macros m4), pero creo que modificar CMAKE_INSTALL_PREFIX después de configurar el proyecto es el mejor lugar.

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

Primera ejecución (sin caché)

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

Segunda ejecución

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

Avíseme si me equivoco, tengo mucho que aprender. Es divertido.

Jim
fuente
Intente usar FORCE cuando lo haga SET: set (CMAKE_INSTALL_PREFIX / foo / bar / bubba CACHE PATH "Cmake prefix" FORCE)
Jav_Rock