在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
相关产品推荐
相关产品推荐

