Я знаю, як отримати звичайну змінну середовища для машини в 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: для отримання значень потрібно запустити нову оболонку.
SET var_name=var_value
щоб встановити змінну середовища в поточному сеансі DOS або SETX var_name var_value
постійно встановити її: див. Set та setx . Набір місцевих також може бути цікавим.
source ~/.bashrc
повторний запуск зміненого .bashrc
файлу та отримати нові значення у поточний сеанс.