Я всегда думаю, что если вы хотите сравнить две строки (но не переменные), все, что вам нужно сделать, это процитировать ее так:
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 :
CMake version: 3.0.2
Quoted test
Surprise!
Unquoted test
Surprise!
Вывод теста 3.1.0 :
CMake version: 3.1.0
Quoted test
OK
Unquoted test
Surprise!