ExternalProject_Add:如何在您的项目中使用构建依赖项?

问题描述

我正在尝试使用 ExternalProject_Add(在本例中为 libpqxx)构建第 3 方依赖项:

ExternalProject_Add(libpqxx_ext
    GIT_REPOSITORY
        https://github.com/jtv/libpqxx
    GIT_TAG
        tags/7.4.1
    GIT_SHALLOW
        true
    PREFIX
        ext
    BINARY_DIR
        build
    CMAKE_ARGS
        -DSKIP_BUILD_TEST=on
    INSTALL_COMMAND
        ""
    BUILD_ALWAYS
        OFF
    )

此步骤完成后,我需要在项目中使用的 libpqxx 工件位于:

  • 文件${CMAKE_CURRENT_BINARY_DIR}/ext/src/libpqxx_ext/include
  • 静态库:${CMAKE_CURRENT_BINARY_DIR}/build/src/libpqxx.a

在我的项目中使用结果:

如何使这些工件可用于我的项目?

我尝试了以下方法

set(LIB_PQXX_SRC_DIR   ${CMAKE_CURRENT_BINARY_DIR}/ext/src/libpqxx_ext)
set(LIB_PQXX_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/build/src)

add_library(libpqxx STATIC IMPORTED GLOBAL)
set_property(TARGET libpqxx APPEND PROPERTY IMPORTED_LOCATION             ${LIB_PQXX_BIN_DIR}/libpqxx.a)
set_property(TARGET libpqxx APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${LIB_PQXX_SRC_DIR}/include)
set_property(TARGET libpqxx APPEND PROPERTY INTERFACE_LINK_LIBRARIES      ${Postgresql_LIBRARIES})

add_dependencies(libpqxx libpqxx_ext)

这不起作用,因为在配置时 ${LIB_PQXX_SRC_DIR}/include 还不存在。

foo/CMakeLists.txt 中的 CMake 错误:导入的目标“libpqxx” 包含不存在的路径

"/home/steve/src/foo/build/3rd-party/pqxx/ext/src/libpqxx_ext/include"

在它的 INTERFACE_INCLUDE_DIRECTORIES 中。可能的原因包括

  • 路径已被删除重命名或移动到其他位置。

  • 安装或卸载过程未成功完成。

  • 安装包有问题,引用了文件 不提供。

添加 add_dependencies 来告诉 cmake libpqxx_ext 需要在 before 构建,libpqxx 不起作用。

请注意,如果我完全删除 libpqxx,然后构建我的项目(以便构建 libpqxx_ext),然后然后添加它,现在一切正常,因为ExternalProject_Add 步骤已运行...但显然当我进行干净结帐时这会中断,因此它不可行。

我也试图告诉 cmake 包含目录已生成,但没有效果

set_source_files_properties(${LIB_PQXX_SRC_DIR}/include PROPERTIES GENERATED TRUE)

问题:

  • 我使用 add_library(libpqxx STATIC IMPORTED GLOBAL) 导入工件是否是使用 ExternalProject_Add 结果的正确/推荐方式?

  • 如果是,我如何告诉 cmake ${LIB_PQXX_SRC_DIR}/include生成的目录?

  • 如果不是,推荐的使 ExternalProject_Add 的结果可用于我的项目的方法是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)