Я знаю, как получить обычную переменную среды машины в CMAKE, используя
$ENV{EnvironmentVariableName}
но я не могу получить переменную среды, специфичную для пользователя. Возможно ли и как?
Я знаю, как получить обычную переменную среды машины в CMAKE, используя
$ENV{EnvironmentVariableName}
но я не могу получить переменную среды, специфичную для пользователя. Возможно ли и как?
Вы можете передать переменную в строке с вызовом cmake:
FOO=1 cmake
или экспортируя переменную в BASH:
export FOO=1
Затем вы можете выбрать его в cmake script, используя:
$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.
Переменные среды (которые вы изменяете с помощью свойств системы) распространяются только на подоболочки при создании новой подоболочки.
Если у вас было приглашение командной строки (DOS или cygwin), открытое при изменении User env vars, они не будут отображаться.
Вам нужно открыть новое приглашение командной строки после изменения пользовательских настроек.
Эквивалент в Unix/Linux добавляет строку к вашему .bash_rc: вам нужно запустить новую оболочку, чтобы получить значения.