如何比较 CMakeLists.txt 中环境变量的值?
回显 $CXX
/usr/local/bin/clang++
Run Code Online (Sandbox Code Playgroud)
因此,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()
Run Code Online (Sandbox Code Playgroud)
它输出
CXX is ENV{CXX}
CXX is defined and it ENV{CXX}
Run Code Online (Sandbox Code Playgroud)
我想修改它以便它输出
CXX is /usr/local/bin/clang++
CXX is defined and it is /usr/local/bin/clang++
which = /usr/local/bin/clang++
Run Code Online (Sandbox Code Playgroud)
...并且,作为旁注,我是否需要测试它是否已定义,或者我可以直接跳到 STREQUAL 吗?
...EQUAL 和 STREQUAL 之间有什么区别?
重新编写以按预期工作:
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()
Run Code Online (Sandbox Code Playgroud)
但更安全的方法如下,因为字符串中带有 $ 的变量包含另一个变量名称的值,将替换该另一个变量,而不是字符串。(即,如果变量 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()
Run Code Online (Sandbox Code Playgroud)
笔记:
if(NOT...MATCHES...)
Run Code Online (Sandbox Code Playgroud)
不起作用。你可以有一个空的 if,所以你必须写:
if(...MATCHES...)
else()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4939 次 |
| 最近记录: |