Конфигурация CMake для внешнего пакета с несколькими библиотеками - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь собрать конфигурацию cmake для представления Sybase OCS / CtLib для сборки cmake.Мы используем cmake 3.7, но являемся довольно новыми пользователями CMake.

Основные требования

  • Поиск установки Sybase может быть в нескольких местах (на данный момент предположим, что $SYBASE переменная окружения указывает на нее)
  • добавить путь включения и путь к библиотеке, указывающие на установку Sybase
  • добавить несколько библиотек Sybase .so в качестве зависимостей

Рекомендуется создать импортированную цель для одной библиотеки с add_library(... IMPORTED) и добавить различные свойства для включаемых каталогов и так далее.Это предпочтительный метод, так как для использования target нужно просто добавить target_link_libraries(target Sybase), и для компиляции и компоновки должен работать All Just Work.Но это кажется немного неуклюжим для нескольких библиотек, так как IMPORTED_LOCATION требуется и, кажется, поддерживает только 1 библиотеку, и, похоже, нет свойства INTERFACE_LIBRARY_DIRECTORIES для установки пути к библиотеке.Конечный результат - link_directories () устанавливается глобально, и одна из библиотек Sybase обрабатывается иначе, чем остальные.

Любые подсказки о том, как обрабатывать этот случай более элегантно и, возможно, более cmake-идиоматически?

Фрагмент здесь, это в основном работает:

# Code to find and set ${SYBASE_ROOT}

find_library(Sybase_CTLIB sybct64 PATHS ${SYBASE_ROOT}/lib NO_DEFAULT_PATH)
link_directories(${SYBASE_ROOT}/lib)
add_library(Sybase UNKNOWN IMPORTED)
set_target_properties(Sybase PROPERTIES
    IMPORTED_LOCATION  ${Sybase_CTLIB}
    INTERFACE_INCLUDE_DIRECTORIES ${Sybase_INCLUDE_DIRECTORIES}
    INTERFACE_LINK_LIBRARIES "sybblk64;sybintl64;sybcomn64;sybcs64;sybsrv64"
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...