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