Как использовать условие в выражении генератора cmake - PullRequest
0 голосов
/ 03 сентября 2018

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

add_library(MyLibrary $<$<IF:${BUILD_SHARED_LIBS},SHARED,STATIC> ${SOURCES})

Для ясности я ожидаю, что это будет эквивалентно следующему:

if(BUILD_SHARED_LIBS)
  add_library(MyLibrary SHARED ${SOURCES})
elseif()
  add_library(MyLibrary STATIC ${SOURCES})
endif()

1 Ответ

0 голосов
/ 03 сентября 2018

AFAIK, вы не можете сделать это с генераторными выражениями (нет способа запросить этот аспект в соответствии с doc), поскольку BUILD_SHARED_LIBS существует именно по этой причине; чтобы позволить вам выбрать его значение во время настройки (используя параметр командной строки -D). Это будет работать, только если вы не установили тип библиотеки явно, как в вашем коде, но вроде этого

add_library(MyLibrary ${SOURCES})

На самом деле, это рекомендуемая практика. Если вам нужно повлиять на его значение в связи с каким-либо другим условием, вы можете переопределить его с помощью обычной логики if()/else(), убедившись, что вы печатаете для пользователя хотя бы информативный message().

Тем не менее, еще лучшим подходом было бы передать эти решения пользователю (с помощью опции s) и проверить наличие недопустимых комбинаций, выдав message(FATAL_ERROR). Даже если это условие определяется автоматически, эта тактика по-прежнему заслуживает внимания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...