Я пытаюсь собрать конфигурацию 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"
)