0

我正在尝试使用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还不存在。

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

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

在其INTERFACE_INCLUDE_DIRECTORIES. 可能的原因包括:

  • 该路径已被删除、重命名或移动到另一个位置。

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

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

添加add_dependencies告诉 cmakelibpqxx_ext需要先构建 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提供给我的项目的推荐方法是什么?

4

0 回答 0