You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在CMake中用EQUAL比较字符串相等失效,原因是什么?

CMake中CMAKE_SYSTEM_NAME判断失效的问题解决

你这里的核心错误是用错了比较运算符:EQUAL是用来比较数值是否相等的,而CMAKE_SYSTEM_NAME是字符串类型,用它来比较字符串"Windows"自然不成立,所以代码会进入else分支。

正确的字符串比较应该用STREQUAL运算符,修正后的代码如下:

message(STATUS "CMAKE_SYSTEM_NAME = >${CMAKE_SYSTEM_NAME}<")

if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
    message(STATUS  "Why am I not called?")
else()
    message(STATUS "I should not be here!\nCMAKE_SYSTEM_NAME = >${CMAKE_SYSTEM_NAME}<.")
endif()

另外补充一点:CMake的if语句中直接引用变量名即可,不需要加${},所以也可以写成更符合CMake惯用风格的版本:

if(CMAKE_SYSTEM_NAME STREQUAL "Windows")

两种写法都能正常工作。

修正后运行,当CMAKE_SYSTEM_NAME为Windows时,就会进入if分支输出对应的提示信息了。

内容的提问来源于stack exchange,提问作者O. Hahn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:18:10