在我的项目中,我有一个依赖项“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?