问题描述
我正在尝试使用 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
步骤已运行...但显然当我进行干净结帐时这会中断,因此它不可行。
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 (将#修改为@)