В чем разница между "опцией" и "установкой CACHE BOOL" для переменной CMake? - программирование
Подтвердить что ты не робот

В чем разница между "опцией" и "установкой CACHE BOOL" для переменной CMake?

Есть ли разница между следующими двумя?

set(FOO true CACHE BOOL "description")

option(FOO "description" ON)

Документация: набор - опция

Предыстория: Даже если я какое-то время использовал CMake, я заметил сегодня только команду option и поэтому всегда использовал set: мне было интересно, безопасно ли/стоит ли заменять первое на второе.

4b9b3361

Ответ 1

В вашем примере нет разницы. Но могут быть различия:

  • Option имеет значение по умолчанию OFF.
  • Вы можете сделать опцию зависимой от других опций с CMakeDependentOption
  • Set принимает типы, отличные от BOOL, особенно ; -lists.

Кроме того, когда вы используете опцию, вы указываете своему пользователю, что она может быть установлена безопасно. Установка внутренних переменных извне может слегка сломать скрипт с недопустимыми значениями.