Как получить переменную пользовательской среды в CMake (Windows) - PullRequest
91 голосов
/ 27 марта 2009

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

$ENV{EnvironmentVariableName}

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

Ответы [ 4 ]

76 голосов
/ 13 октября 2014

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

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

FOO=1 cmake

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

export FOO=1

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

$ENV{FOO}
8 голосов
/ 09 апреля 2017

Вы также можете вызвать , чтобы сделать это кросс-платформенным способом:

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}")

1024 * Ссылка *

3 голосов
/ 18 октября 2011

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

export EnvironmentVariableName=foo

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

1 голос
/ 02 июля 2014

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...