Как получить переменную пользовательской среды в CMake (Windows)

Я знаю, как получить обычную переменную среды машины в CMAKE, используя

$ENV{EnvironmentVariableName}

но я не могу получить переменную среды, специфичную для пользователя. Возможно ли и как?

Ответ 1

Получение переменных в ваш CMake script

Вы можете передать переменную в строке с вызовом cmake:

FOO=1 cmake

или экспортируя переменную в BASH:

export FOO=1

Затем вы можете выбрать его в cmake script, используя:

$ENV{FOO}

Ответ 2

Вы также можете вызвать 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}")

Ссылка

Ответ 3

Вам нужно экспортировать переменные. Так, например, в Linux:

export EnvironmentVariableName=foo

Неактивные переменные пусты в CMAKE.

Ответ 4

Переменные среды (которые вы изменяете с помощью свойств системы) распространяются только на подоболочки при создании новой подоболочки.

Если у вас было приглашение командной строки (DOS или cygwin), открытое при изменении User env vars, они не будут отображаться.

Вам нужно открыть новое приглашение командной строки после изменения пользовательских настроек.

Эквивалент в Unix/Linux добавляет строку к вашему .bash_rc: вам нужно запустить новую оболочку, чтобы получить значения.