Ответ 1
Вы правильно указали код CMake. Проблема, скорее всего, заключается в том, что вы устанавливаете только переменную среды в своей оболочке, но не экспортируете ее. Перед вызовом cmake
выполните следующие действия:
export THING
Я установил переменную окружения в моем профиле 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()
Вы правильно указали код CMake. Проблема, скорее всего, заключается в том, что вы устанавливаете только переменную среды в своей оболочке, но не экспортируете ее. Перед вызовом cmake
выполните следующие действия:
export THING
Я сделал это, но это не работает. CMake не может обнаружить это.
export THING
Но это работает.
export THING=on
Может быть, я всегда должен давать значение по умолчанию для переменной среды.
Кстати, вы можете проверить строку среды, следуя коду CMake.
if( $ENV{THING} STREQUAL "on")
message(STATUS "THING = " $ENV{THING})
endif()
Прекрасно зная, что делает 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]--
Просто чтобы быть ясно: как https://cmake.org/cmake/help/latest/command/if.html говорит:
if (DEFINED ENV{THING})
# do stuff
endif()
правильный синтаксис, нигде нет.
Заменить
if(DEFINED ENV{THING})
с
if(DEFINED $ENV{THING})
Вы пропустили '$' перед переменной.