我在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()
答案 0 :(得分:9)
您的CMake代码是正确的。问题很可能只是你在shell中设置环境变量但没有导出它。在调用export THING
之前运行以下命令:
{% url %}
答案 1 :(得分:4)
我做了这个,但它不起作用。 CMake无法检测到它。
export THING
但是这个是工作。
export THING=on
也许我应该总是为环境变量赋予默认值。
顺便说一下,你可以按照CMake代码检查环境字符串。
if( $ENV{THING} STREQUAL "on")
message(STATUS "THING = " $ENV{THING})
endif()
答案 2 :(得分:4)
完全了解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]--
答案 3 :(得分:0)
请明确说明:正如https://cmake.org/cmake/help/latest/command/if.html所说:
if (DEFINED ENV{THING})
# do stuff
endif()
是正确的语法,任何地方都没有$
答案 4 :(得分:-5)
替换
if(DEFINED ENV{THING})
与
if(DEFINED $ENV{THING})
你在变量之前错过了'$'。