Как проверить, установлена ​​ли переменная среды в cmake

Я установил переменную окружения в моем профиле bash, поэтому я могу видеть его в терминале просто отлично.,

blah/builds $echo $THING

штуковина

Как отобразить его в сообщении cmake и проверить, установлен ли он? Я пробовал следующее, но он просто отображает вещь как пустое и пропускает тело оператора if

message("THING:" $ENV{THING})
if(DEFINED ENV{THING})
    message(STATUS "THING environment variable defined")
    # some more commands
endif()

Ответы

Ответ 1

Вы правильно указали код CMake. Проблема, скорее всего, заключается в том, что вы устанавливаете только переменную среды в своей оболочке, но не экспортируете ее. Перед вызовом cmake выполните следующие действия:

export THING

Ответ 2

Я сделал это, но это не работает. CMake не может обнаружить это.

export THING

Но это работает.

export THING=on

Может быть, я всегда должен давать значение по умолчанию для переменной среды.

Кстати, вы можете проверить строку среды, следуя коду CMake.

if( $ENV{THING} STREQUAL "on")
    message(STATUS "THING = " $ENV{THING})
endif()

Ответ 3

Прекрасно зная, что делает export и как работает окружающая среда в целом, у меня все еще есть набор WTF с этой формой:

IF(DEFINED $ENV{THING})

но это работало нормально в такой форме:

IF(DEFINED ENV{THING})

Обратите внимание на пропуск $.


Обратите внимание, что вы можете быстро проверить это с помощью cmake -P:

[~] cat > test-env.cmake << 'EOF'
IF(DEFINED ENV{FOOBAR})
    MESSAGE(STATUS "FOOBAR env seen: --[$ENV{FOOBAR}]--")
ELSE()
    MESSAGE(STATUS "WTF")
ENDIF()
EOF
[~]
[~] FOOBAR=test cmake -P test-env.cmake
-- FOOBAR env seen: --[test]--

Ответ 5

Заменить

if(DEFINED ENV{THING})

с

if(DEFINED $ENV{THING})

Вы пропустили '$' перед переменной.