Como usar CMAKE_INSTALL_PREFIX


97

Eu quero gerar o Makefile com o destino de instalação, fazendo a instalação em / usr ao invés do padrão / usr / local. Supondo que o diretório de compilação seja feito no subdiretório de origem, eu executo:

cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

CMakeCache.txt contém: CMAKE_INSTALL_PREFIX:PATH=/usr(OK?)

Agora eu executo:

faço
faça a instalação

Todos os arquivos ainda estão instalados em usr / local. O que está errado?

Editar: Não há CMAKE_INSTALL_PREFIX em nenhum dos arquivos de projeto CMakeLists.txt. Antes de executar o cmake, excluo tudo do diretório de saída. as diretivas de instalação em CMakeLists.txt são semelhantes a:

install(TARGETS mylibrary DESTINATION lib)

Respostas:



30

Existem duas maneiras de usar esta variável:

  • passando-o como um argumento de linha de comando, assim como Job mencionou:

    cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..

  • atribuindo valor a ele em CMakeLists.txt:

    SET(CMAKE_INSTALL_PREFIX < install_path >)

    Mas lembre-se de colocá-lo ANTES do PROJECT(< project_name>) comando, caso contrário não funcionará!


4
Estranho, a instrução SET () funciona para mim apenas se eu colocá-la APÓS a instrução PROJECT () (CMake 2.8).
AstroFloyd

2
Esta resposta e a referência à qual ela se vincula discutem mais diretamente o problema do comando antes / depois do projeto ().
Craig Scott

O que é esse PROJECTcomando e como ter essa cmakeopção antes dele? Você teria um exemplo?
Stephane

6

Mas lembre-se de colocá-lo no comando BEFORE PROJECT (<project_name>), caso contrário ele não funcionará!

Minha primeira semana usando cmake - depois de alguns anos de GNU autotools - então ainda estou aprendendo (melhor do que escrever macros m4), mas acho que modificar CMAKE_INSTALL_PREFIX após definir o projeto é o melhor 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")

Primeira execução (sem 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

Segunda corrida

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

Avise-me se eu estiver enganado, tenho muito o que aprender. É divertido.


Tente usar FORCE ao fazer SET: set (CMAKE_INSTALL_PREFIX / foo / bar / bubba CACHE PATH "Cmake prefix" FORCE)
Jav_Rock
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.