Я не уверен, что команда CMake if()
будет обрабатывать символ в условии условия как переменная или строка литерал.Поэтому я провел несколько экспериментов.
Script1.cmake
cmake_minimum_required(VERSION 3.15)
set(XXX "YYY") #<========== HERE!!
if(XXX STREQUAL "XXX")
message("condition 1 is true") # If reach here, XXX is treated as string
elseif(XXX STREQUAL "YYY")
message("condition 2 is true") # If reach here, XXX is treated as variable
endif()
Вывод:
condition 2 is true
Итак, я подхожу ниже заключение 1 .
Для символа в условии условия:
- Если символ определен как переменная ранее, CMake будет обрабатывать егов качестве переменной и используйте ее значение для оценки.
- Если символ не определен как переменная ранее, CMake будет обрабатывать его буквально как строку.
Затем я провел еще один эксперимент.
set(ON "OFF")
if(ON)
message("condition 3 is true") # If reach here, ON is treated as a constant.
else()
message("condition 4 is true") # If reach here. ON is treated as a variable.
endif()
Вывод:
condition 3 is true
Итак, хотя ON
явно определено как переменная, if
команда все еще рассматривает это как константу ИСТИННОГО значения.Это прямо противоречит моему предыдущему заключению 1 .
Так как я могу точно знать, что команда CMake if () будет обрабатывать символ как строку или переменную ??
ДОБАВИТЬ 1 - 11:04 7/11/2019
Кажется, форма if(constant)
предшествует другим формам выражения if()
.( src )
if(<constant>)
Истина, если константа равна 1, ВКЛ, ДА, ИСТИНА, Y или ненулевое число.False, если константа равна 0, OFF, NO, FALSE, N, IGNORE, NOTFOUND, пустой строке или заканчивается суффиксом -NOTFOUND.Именованные логические константы не чувствительны к регистру. Если аргумент не является одной из этих конкретных констант, он обрабатывается как переменная или строка, и используется следующая подпись.
Итак, сейчас я должен обратиться квышеупомянутое правило сначала, прежде чем применять мой вывод 1 .(Это может быть ответом, но я еще не уверен.)