比较CMakeLists.txt中环境变量的值

时间:2015-05-09 04:42:04

标签: cmake

如何比较CMakeLists.txt中的环境变量值?

echo $ CXX

/usr/local/bin/clang++

因此,CXX已在我的/ etc / profile中正确设置。然后,在CMakeLists.txt中,我把:

message(status "CXX is " ENV{CXX})
if(DEFINED ENV{CXX})
    message(status "CXX is defined and it is " ENV{CXX})
    if(ENV{CXX} STREQUAL "/usr/local/bin/clang++")
        message(status "which = /usr/local/bin/clang++")
    endif()
else()
    message(status "CXX is undefined")
endif()

并输出

CXX is ENV{CXX}
CXX is defined and it ENV{CXX}

我想修改它以便输出

CXX is /usr/local/bin/clang++
CXX is defined and it is /usr/local/bin/clang++
which = /usr/local/bin/clang++

...而且,作为旁注,我是否需要测试它是否已定义,还是我可以直接跳到STREQUAL?

...... EQUAL和STREQUAL有什么区别?

1 个答案:

答案 0 :(得分:4)

重写为按预期工作:

message(status "CXX is " $ENV{CXX})
if(DEFINED ENV{CXX})
    message(status "CXX is defined and it is " $ENV{CXX})
    if("$ENV{CXX}" STREQUAL "/usr/local/bin/clang++")
        message(status "which = /usr/local/bin/clang++")
    endif()
else()
    message(status "CXX is undefined")
endif()

但更安全的方法如下,因为带有$的字符串中的变量将包含另一个变量名称的值,而不是字符串。 (即,如果变量X是“foo”,变量Y是“X”,则“$ {Y}”可能被评估为“X”,但由于该变量名称存在,它实际上被评估为“foo”)< / p>

message(status "CXX is " $ENV{CXX})
if(DEFINED ENV{CXX})
    message(status "CXX is defined and it is " $ENV{CXX})
    if($ENV{CXX} MATCHES "/usr/local/bin/clang++")
        message(status "which = /usr/local/bin/clang++")
    endif()
else()
    message(status "CXX is undefined")
endif()

注:

if(NOT...MATCHES...)

不起作用。你可以有一个空的if,所以你必须写:

if(...MATCHES...)
else()