我一直认为,如果你想比较两个字符串(但不是变量),你需要做的就是引用它:
if("${A}" STREQUAL "some string")
Run Code Online (Sandbox Code Playgroud)
但现在我发现这段代码有时打印出来oops:
cmake_minimum_required(VERSION 2.8)
if("d" STREQUAL "")
message("oops...")
endif()
Run Code Online (Sandbox Code Playgroud)
可能是它的错误(因为它用Xcode打印,但不是用make打印)?还是有一些特殊的变量?
更新
有没有描述问题的命令字符串:
string(COMPARE EQUAL "${A}" "" result)
if(result)
message("...")
endif()
Run Code Online (Sandbox Code Playgroud)
更新2
我期望从CMake 3.1.0开始实现的行为(参见CMP0054).
3.0.2 测试的输出:
CMake version: 3.0.2
Quoted test
Surprise!
Unquoted test
Surprise!
Run Code Online (Sandbox Code Playgroud)
3.1.0 测试的输出:
CMake version: 3.1.0
Quoted test
OK
Unquoted test
Surprise!
Run Code Online (Sandbox Code Playgroud) cmake ×1