我正在尝试使用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提供给我的项目的推荐方法是什么?