首页 > 解决方案 > 如何让 CMake 安装我的目标所依赖的外部项目?

问题描述

我正在开发一个应用程序并将一些功能分离到第二个存储库中。我想要

  1. 使库 repo 成为 git 子模块,因为两者将并行开发
  2. 将库作为依赖项包含在我的 CMakeLists 中,而无需在系统范围内安装它。

所以我有这样的布局:

. CMakeLists.txt
|_ src
|_ include
|_ third_party
   |_ my_library
      |_ CMakeLists.txt
      |_ src
      |_ include

现在CMakeLists.txtinmy_library创建了一些带有 的库add_library(),并且它还有一个install复制libmy_library.a到的目标my_library/lib

我想在我的顶层依赖这个库CMakeLists.txt。因此,在我尝试为自己的目标引用库之前,我my_library需要构建和安装CMake 项目。我尝试ExternalProject_Add()这样使用:

./CMakeLists.txt

set(MY_LIB_DIR ${CMAKE_SOURCE_DIR}/third_party/my_library)

ExternalProject_Add(my_library
    SOURCE_DIR ${MY_LIB_DIR}
    UPDATE_DISCONNECTED TRUE 
    BUILD_IN_SOURCE FALSE
    BINARY_DIR ${MY_LIB_DIR}/build
)

list(APPEND CMAKE_PREFIX_PATH ${MY_LIB_DIR}/lib)

# find compiled lib
find_library(MY_LIB_LIBRARY my_library)

add_executable(main ${SOURCES})
add_dependencies(main my_library)  
target_link_libraries(main ${MY_LIB_LIBRARY})

但是,这不起作用,因为在 cmake 读取配置时,libmy_library.a尚未构建。

因此问题是:如何让 CMake 构建和安装外部项目,以便我可以将安装工件列为依赖项?

有人建议这是重复的,但链接的答案在当前项目中构建了外部项目,我认为这是不可取的。

标签: c++cmake

解决方案


推荐阅读