Verwendung von CMAKE_INSTALL_PREFIX

97

Ich möchte Makefile mit dem Installationsziel generieren und die Installation in / usr anstelle von default / usr / local durchführen. Angenommen, das Build-Verzeichnis befindet sich im Quell-Unterverzeichnis, führe ich Folgendes aus:

cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

CMakeCache.txt enthält: CMAKE_INSTALL_PREFIX:PATH=/usr(OK?)

Jetzt führe ich aus:

machen
make install

Alle Dateien sind weiterhin auf usr / local installiert. Was ist falsch?

Bearbeiten: In keiner der CMakeLists.txt-Projektdateien ist CMAKE_INSTALL_PREFIX enthalten. Bevor ich cmake ausführe, lösche ich alles aus dem Ausgabeverzeichnis. Installationsanweisungen in CMakeLists.txt sehen folgendermaßen aus:

install(TARGETS mylibrary DESTINATION lib)

Alex F.
quelle

Antworten:

120

Das sollte sein (siehe die Dokumente ):

cmake -DCMAKE_INSTALL_PREFIX=/usr ..
Job
quelle
30

Es gibt zwei Möglichkeiten, diese Variable zu verwenden:

  • Übergeben als Befehlszeilenargument, genau wie Job es erwähnt hat:

    cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..

  • Zuweisen von Wert in CMakeLists.txt:

    SET(CMAKE_INSTALL_PREFIX < install_path >)

    Aber denken Sie daran, es VOR dem PROJECT(< project_name>) Befehl zu platzieren, sonst funktioniert es nicht!

ryan_tu
quelle
4
Seltsamerweise funktioniert die SET () - Anweisung für mich nur, wenn ich sie NACH der PROJECT () - Anweisung (CMake 2.8) platziere.
AstroFloyd
2
In dieser Antwort und dem Verweis, auf den sie verweist, wird das Problem vor / nach dem Befehl project () direkter erläutert.
Craig Scott
Was ist dieser PROJECTBefehl und wie kann diese cmakeOption davor stehen? Sie hätten ein Beispiel?
Stephane
6

Denken Sie jedoch daran, den Befehl BEFORE PROJECT (<Projektname>) zu platzieren, da er sonst nicht funktioniert!

Meine erste Woche mit cmake - nach einigen Jahren mit GNU-Autotools - lerne ich noch (besser als das Schreiben von m4-Makros), aber ich denke, dass das Ändern von CMAKE_INSTALL_PREFIX nach dem Festlegen des Projekts der bessere Ort ist.

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

Erster Lauf (kein 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

Zweiter Lauf

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

Lassen Sie mich wissen, wenn ich mich irre, ich habe viel zu lernen. Es macht Spaß.

Jim
quelle
Versuchen Sie, FORCE zu verwenden, wenn Sie SET: set (CMAKE_INSTALL_PREFIX / foo / bar / bubba CACHE PATH "Cmake Präfix" FORCE)
Jav_Rock