Установить взаимоисключающие переменные в CMake?

#cmake #cmake-gui

#cmake #cmake-графический интерфейс

Вопрос:

У меня есть проект, в котором я использую 2 разные библиотеки в зависимости от интересов пользователя. Во время генерации я хотел бы предоставить пользователю выбор, какую библиотеку создавать. До сих пор я использовал что-то вроде этого:

 set(BUILD_WITH_IR  OFF CACHE BOOL "build ir")
set(BUILD_WITH_TOF OFF CACHE BOOL "build tof")
  

Проблема:

Я вижу 2 флажка в графическом интерфейсе CMake для выбора. Я выбираю одну и нажимаю настроить. CMake сбрасывает оба флажка в положение ВЫКЛ (снято). Понятно, потому что оба значения отключены при каждой настройке CMake.

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

Как я могу сделать эти переменные взаимоисключающими?

Комментарии:

1. ? В чем смысл? Сделать set(BUILD_WITH nothing CACHE STRING "build with that thung") с set_property(CACHE BUILD_WITH PROPERTY STRINGS nothing IR TOF) . Странно создавать multiption, используя несколько логических параметров… blog.kitware.com/… В любом случае, это должно быть выполнимо с помощью cmake_dependent_option .

Ответ №1:

Это выглядит как один параметр, который принимает несколько значений, а не два отдельных несвязанных параметра. Попробуйте:

  set(YOURLIB_BUILD_WITH "NOTHING" CACHE STRING "build with that thing")
 set_property(CACHE YOURLIB_BUILD_WITH PROPERTY STRINGS "NOTHING" "IR" "TOF")
  

Комментарии:

1. Может быть, вы также можете добавить, как это сделать с помощью cmake_dependent_option . Помогло бы другим. Спасибо!