Я знаю, как получить обычную переменную среды для всей машины в CMAKE, используя
$ENV{EnvironmentVariableName}
но я не могу получить переменную среды для конкретного пользователя. Возможно ли это и как?
Я знаю, как получить обычную переменную среды для всей машины в CMAKE, используя
$ENV{EnvironmentVariableName}
но я не могу получить переменную среды для конкретного пользователя. Возможно ли это и как?
Ответы:
Вы можете передать переменную в строке с вызовом cmake:
FOO=1 cmake
или путем экспорта переменной в BASH:
export FOO=1
Затем вы можете забрать его в скрипте cmake, используя:
$ENV{FOO}
Вы также можете вызвать cmake сам, чтобы сделать это кроссплатформенным способом:
cmake -E env EnvironmentVariableName="Hello World" cmake ..
env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...
Запустить команду в измененной среде.
Просто имейте в виду, что это может сработать только в первый раз. Если CMake переконфигурируется с одной из последовательных сборок (вы просто вызываете, например make
, одна CMakeLists.txt
была изменена, и CMake снова запускает процесс генерации), пользовательская переменная среды может больше не присутствовать (по сравнению с общесистемными переменными среды).
Поэтому я переношу эти определенные пользователем переменные среды в свои проекты в кэшированную переменную 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}")
Ссылка
Вам необходимо экспортировать свои переменные. Так, например, в Linux:
export EnvironmentVariableName=foo
Неэкспортированные переменные пусты в CMAKE.
IF($ENV{COVERAGE}) ... END()
, вызов: COVERAGE=1 cmake ..
. Конечно, я не проверяю содержимое, и не знаю, проверял бы это. Но он, безусловно, работает для тестирования, если он определен или нет!
Переменные среды (которые вы изменяете с помощью свойств системы) распространяются на подоболочки только при создании новой подоболочки.
Если у вас была открыта командная строка (DOS или cygwin), когда вы изменили переменные окружения пользователя, то они не появятся.
После изменения пользовательских настроек вам необходимо открыть новую строку командной строки.
Эквивалент в Unix / Linux - это добавление строки в ваш .bash_rc: вам нужно запустить новую оболочку, чтобы получить значения.
source ~/.bashrc
чтобы повторно запустить измененный .bashrc
файл и получить новые значения в текущем сеансе.