具有多个库的外部软件包的CMake配置

时间:2018-08-27 04:04:19

标签: cmake

我正在尝试构建cmake配置,以将Sybase OCS / CtLib表示为cmake构建。我们正在使用cmake 3.7,但是他们是CMake的新用户。

基本要求是

  • 可以在许多地方搜索Sybase安装(目前,假设$SYBASE环境变量指向它)
  • 添加一个包含路径和一个库路径以指向Sybase安装
  • 添加许多Sybase .so库作为依赖项

推荐的方法似乎是使用add_library(... IMPORTED)为一个库创建一个导入目标,并为include目录添加各种属性,等等。这是首选方法,因为使用目标仅需要添加target_link_libraries(target Sybase),并且应该全部适用于编译和链接。但这对于多个库来说似乎有些笨拙,因为需要IMPORTED_LOCATION并且似​​乎仅支持1个库,并且似乎没有INTERFACE_LIBRARY_DIRECTORIES属性来设置库路径。最终结果是,全局设置了link_directories(),并且其中一个Sybase库与其余库的处理方式有所不同。

关于如何更优雅地,也许更习惯地处理此案的任何线索?

此处的代码段通常有效:

# 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"
)

0 个答案:

没有答案