首页 > 解决方案 > 从外部 CMakeLists.txt 文件导入目标,已经构建了外部源

问题描述

我正在尝试将Refinitiv Real-Time SDK集成到我自己的应用程序中。

我已经下载了源代码并构建了库。

通常,您会期望有一个 INSTALL 目标,它将库和头文件安装到某个位置,然后,如果幸运的话,find_package我们可以稍后使用该模块将库目标导入到我们自己的项目中。

不幸的是,这些都没有提供。

那么,如何将库及其头文件导入我的项目?

ExternalProject_Add

我不想ExternalProject_Add每次重新配置我的项目时都使用标准来下载和构建源代码。(特别是因为我们的 CI 服务器必须为每次构建都执行此操作。)我想构建一次(并使其成为 CI 服务器的 docker 映像的一部分),然后链接库/直接包含头文件从我复制源的地方。

add_library INTERFACE

我知道我可以创建一个新的INTERFACE库目标

find_library(LIB_EMA ema ${REFINITIV_BINARY_DIR})
find_library(LIB_ETA eta ${REFINITIV_BINARY_DIR})
# etc.. for all the refinitiv libraries

add_library(refinitiv INTERFACE)

target_link_libraries(refinitiv INTERFACE
    ${LIB_EMA}
    ${LIB_ETA}
    # etc...
    )

target_include_directories(refinitiv INTERFACE
    ${REFINITIV_SOURCE_DIR/Ema/Include
    ${REFINITIV_SOURCE_DIR/Eta/Include
    # etc...
    )

但是,每当 Refinitiv 发布新的 SDK 版本并决定更改路径或链接依赖项等时,这很乏味且容易中断

问题:

我要做的是使用他们的CMakeLists.txt文件,但只能访问已经构建的目标,而不是将它们构建为我的构建的一部分。

这可能吗?

标签: cmakeexternal-project

解决方案


推荐阅读