【发布时间】:2020-07-09 22:02:41
【问题描述】:
在我的项目中,我有一个依赖项 "A" 有另一个库依赖项 "B",我正在尝试在 A 之前下载并安装依赖项 B为了消除冲突。我正在使用Externalproject_add、FetchContent_Declare 和install,但它失败了。
举个例子
我有一个 CMakeList.txt,例如:
FetchContent_Declare( libpng
GIT_REPOSITORY https://github.com/glennrp/libpng.git
GIT_TAG master
UPDATE_DISCONNECTED TRUE
STEP_TARGETS update
)
FetchContent_GetProperties(libpng)
if (NOT libpng_POPULATED)
FetchContent_Populate(libpng)
add_subdirectory("${libpng_SOURCE_DIR}" ${libpng_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
这个 libpng 的 CMakeList.txt 有 find_package(ZLIB REQUIRED) 行,此时我可以手动下载并安装 zlib,但由于我正在开发一个库,我希望我的代码能够处理这种依赖关系。我也无法修改 libpng 的 CMakeList.txt。所以,我有这段代码,但它仍然失败。
FetchContent_Declare( zlib
GIT_REPOSITORY https://github.com/zlib-ng/zlib-ng.git
GIT_TAG develop
UPDATE_DISCONNECTED TRUE
STEP_TARGETS update
)
FetchContent_GetProperties(zlib)
if (NOT zlib_POPULATED)
FetchContent_Populate(zlib)
add_subdirectory("${zlib_SOURCE_DIR}" ${zlib_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
install(TARGETS zlib)
我仍然从 CMake 开始,我不断学习,但很难找到合适的例子。
那么,我如何安装外部项目以使其可用于 find_package?
【问题讨论】:
标签: c++ cmake cmake-modules