如何比较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有什么区别?
答案 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()