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

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

$ENV{EnvironmentVariableName}

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

83 голоса | спросил Lars Bilke 27 MarpmFri, 27 Mar 2009 18:27:13 +03002009-03-27T18:27:13+03:0006 2009, 18:27:13

4 ответа


0

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

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

FOO=1 cmake

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

export FOO=1

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

$ENV{FOO}
ответил Cameron Lowell Palmer 13 +04002014-10-13T12:48:55+04:00312014bEurope/MoscowMon, 13 Oct 2014 12:48:55 +0400 2014, 12:48:55
0

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

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

Ссылка

ответил Florian 9 PMpSun, 09 Apr 2017 22:06:56 +030006Sunday 2017, 22:06:56
0

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

export EnvironmentVariableName=foo

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

ответил P51DAce 18 +04002011-10-18T23:59:15+04:00312011bEurope/MoscowTue, 18 Oct 2011 23:59:15 +0400 2011, 23:59:15
0

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

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

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

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

ответил Mark Lakata 2 J000000Wednesday14 2014, 03:52:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132