如何使CMake安装目标所依赖的外部项目?

时间:2019-05-16 19:43:39

标签: c++ cmake

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

  1. 使库回购一个git子模块,因为两者将并排开发
  2. 将该库作为依赖项包含在我的CMakeList中,而无需在系统范围内进行安装。

所以我有这样的布局:

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

现在CMakeLists.txt中的my_library创建了一个add_library()的lib,并且它还有一个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构建并安装外部项目,以便我可以将安装工件列为依赖项?

有人建议这是重复的,但是链接的答案会在当前项目内部构建外部项目,这是我不希望的。

0 个答案:

没有答案