如何检查是否在cmake中设置了环境变量

时间:2015-04-17 00:15:52

标签: bash cmake environment-variables

我在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()

5 个答案:

答案 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})

你在变量之前错过了'$'。