Ich weiß, wie man eine normale maschinenweite Umgebungsvariable in CMAKE mit abruft
$ENV{EnvironmentVariableName}
Ich kann jedoch keine benutzerspezifische Umgebungsvariable abrufen. Ist es möglich und wie?
Ich weiß, wie man eine normale maschinenweite Umgebungsvariable in CMAKE mit abruft
$ENV{EnvironmentVariableName}
Ich kann jedoch keine benutzerspezifische Umgebungsvariable abrufen. Ist es möglich und wie?
Antworten:
Sie können eine Variable in der Zeile mit dem cmake-Aufruf übergeben:
FOO=1 cmake
oder durch Exportieren einer Variablen in BASH:
export FOO=1
Dann können Sie es in einem cmake-Skript abrufen, indem Sie:
$ENV{FOO}
Sie können auch aufrufen cmake selbst, um dies plattformübergreifend zu tun:
cmake -E env EnvironmentVariableName="Hello World" cmake ..
env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...
Führen Sie den Befehl in einer geänderten Umgebung aus.
Beachten Sie jedoch, dass dies möglicherweise nur beim ersten Mal funktioniert. Wenn CMake mit einem der aufeinanderfolgenden Builds neu konfiguriert wird (Sie rufen einfach z. B. make
einen CMakeLists.txt
auf, der geändert wurde und CMake den Generierungsprozess erneut durchläuft), ist die benutzerdefinierte Umgebungsvariable möglicherweise nicht mehr vorhanden (im Vergleich zu systemweiten Umgebungsvariablen).
Daher übertrage ich diese benutzerdefinierten Umgebungsvariablen in meinen Projekten in eine zwischengespeicherte CMake-Variable:
cmake_minimum_required(VERSION 2.6)
project(PrintEnv NONE)
if (NOT "$ENV{EnvironmentVariableName}" STREQUAL "")
set(EnvironmentVariableName "$ENV{EnvironmentVariableName}" CACHE INTERNAL "Copied from environment variable")
endif()
message("EnvironmentVariableName = ${EnvironmentVariableName}")
Referenz
Sie müssen Ihre Variablen exportieren lassen. So zum Beispiel unter Linux:
export EnvironmentVariableName=foo
Nicht exportierte Variablen sind in CMAKE leer.
IF($ENV{COVERAGE}) ... END()
, Aufruf : COVERAGE=1 cmake ..
. Zugegeben, ich überprüfe den Inhalt nicht und weiß nicht, ob es so wäre. Aber es funktioniert auf jeden Fall zum Testen, ob es definiert ist oder nicht!
Umgebungsvariablen (die Sie mithilfe der Systemeigenschaften ändern) werden nur dann an Subshells weitergegeben, wenn Sie eine neue Subshell erstellen.
Wenn beim Ändern der Benutzerumgebungsvariablen eine Eingabeaufforderung (DOS oder Cygwin) geöffnet war, werden diese nicht angezeigt.
Sie müssen eine neue Eingabeaufforderung öffnen, nachdem Sie die Benutzereinstellungen geändert haben.
Das Äquivalent in Unix / Linux ist das Hinzufügen einer Zeile zu Ihrer .bash_rc: Sie müssen eine neue Shell starten, um die Werte zu erhalten.
source ~/.bashrc
, um die geänderte .bashrc
Datei erneut auszuführen und die neuen Werte in Ihre aktuelle Sitzung zu übernehmen.