【发布时间】:2013-11-27 17:45:42
【问题描述】:
我一直认为,如果你想比较两个字符串(而不是变量),你需要做的就是这样引用它:
if("${A}" STREQUAL "some string")
但现在我发现这段代码有时会打印出oops:
cmake_minimum_required(VERSION 2.8)
if("d" STREQUAL "")
message("oops...")
endif()
可能是错误(因为它使用Xcode 打印,但不是make)? 还是有一些特殊的变量?
- cmake: 2.8.12, 2.8.11.2
- xcode:4.6.2、5.0.1
更新
有命令string 没有描述问题:
string(COMPARE EQUAL "${A}" "" result)
if(result)
message("...")
endif()
更新 2
自CMake 3.1.0(参见CMP0054)以来我所期望的行为。
3.0.2 的输出test:
CMake version: 3.0.2
Quoted test
Surprise!
Unquoted test
Surprise!
3.1.0 的输出test:
CMake version: 3.1.0
Quoted test
OK
Unquoted test
Surprise!
【问题讨论】:
-
当“变量”未定义时,它有时会进入 (VAR STREQUAL "") 条件。在这种情况下 (NOT DEFINED VAR) 是设置默认值的暂缓时间(例如)。此处参考:cmake.org/cmake/help/v3.3/command/if.html
-
我认为中间操作符在哪里被弃用了?在 CMAKE 中很难确定什么是新的,什么是旧的。
标签: cmake