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

3

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

echo $CXX

/usr/local/bin/clang++

所以,在我的 /etc/profile 中正确定义了 CXX。然后,在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个回答

5

改写以使其按预期工作:

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”)

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接