Wiem, jak pobrać normalną zmienną środowiskową dla całej maszyny w CMAKE przy użyciu
$ENV{EnvironmentVariableName}
ale nie mogę pobrać zmiennej środowiskowej specyficznej dla użytkownika. Czy to możliwe i jak?
Wiem, jak pobrać normalną zmienną środowiskową dla całej maszyny w CMAKE przy użyciu
$ENV{EnvironmentVariableName}
ale nie mogę pobrać zmiennej środowiskowej specyficznej dla użytkownika. Czy to możliwe i jak?
Odpowiedzi:
Możesz przekazać zmienną w linii z wywołaniem cmake:
FOO=1 cmake
lub eksportując zmienną w BASH:
export FOO=1
Następnie możesz go odebrać w skrypcie cmake za pomocą:
$ENV{FOO}
Możesz także wywołać cmake zrobić to w sposób wieloplatformowy:
cmake -E env EnvironmentVariableName="Hello World" cmake ..
env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...
Uruchom polecenie w zmodyfikowanym środowisku.
Wystarczy mieć świadomość , że to może działać tylko za pierwszym razem. Jeśli CMake ponownie konfiguruje się z jedną z kolejnych kompilacji (po prostu wywołujesz, na przykład make
, jedna CMakeLists.txt
została zmieniona i CMake ponownie przechodzi przez proces generowania), zmienna środowiskowa zdefiniowana przez użytkownika może już nie istnieć (w porównaniu ze zmiennymi środowiskowymi całego systemu).
Więc przenoszę te zmienne środowiskowe zdefiniowane przez użytkownika w moich projektach do zmiennej buforowanej CMake:
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}")
Odniesienie
Musisz wyeksportować zmienne. Na przykład w Linuksie:
export EnvironmentVariableName=foo
Niewyeksportowane zmienne są puste w CMAKE.
IF($ENV{COVERAGE}) ... END()
, wezwanie: COVERAGE=1 cmake ..
. To prawda, nie sprawdzam zawartości i nie wiem, czy tak. Ale z pewnością działa w testach, jeśli jest zdefiniowany, czy nie!
Zmienne środowiskowe (modyfikowane przy użyciu właściwości systemu) są propagowane tylko do podpowłok podczas tworzenia nowej podpowłoki.
Jeśli masz otwarty wiersz poleceń (DOS lub cygwin) po zmianie zmiennych środowiska użytkownika, nie pojawią się.
Po zmianie ustawień użytkownika musisz otworzyć nowy wiersz polecenia.
Odpowiednikiem w systemie Unix / Linux jest dodanie linii do twojego .bash_rc: musisz uruchomić nową powłokę, aby uzyskać wartości.
source ~/.bashrc
ponownie zmodyfikowany .bashrc
plik i pobrać nowe wartości do bieżącej sesji.