gpt4 book ai didi

c++ - 使外部项目可用于find_package CMake

转载 作者:行者123 更新时间:2023-12-02 10:13:07 28 4
gpt4 key购买 nike

在我的项目中,我有一个依赖项“A” ,它具有另一个库依赖项“B” ,我试图在A之前下载并安装依赖项B以清除冲突。我正在使用Externalproject_addFetchContent_Declareinstall,但是失败。
举个例子
我有一个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?

最佳答案

从技术上讲,您可以通过应用补丁来“修改” png项目。
不幸的是FetchContent / add_subdirectory()(即将第三方作为子项目合并)无法与find_package()一起使用。
你应该用这样的东西代替

if(NOT TARGET ZLIB::ZLIB)
find_package(ZLIB)
endif()
即创建一个补丁并将其应用于png之上
  message(CHECK_START "Fetching png")
list(APPEND CMAKE_MESSAGE_INDENT " ")
FetchContent_Declare(
png
GIT_REPOSITORY "https://github.com/glennrp/libpng.git"
GIT_TAG "master"
PATCH_COMMAND git apply ".../patches/png.patch")
# here if you want to force some option(s) (must have CMP0077 to NEW)
#e.g. set(CMAKE_BUILD_SHARED OFF)
FetchContent_MakeAvailable(png)
list(POP_BACK CMAKE_MESSAGE_INDENT)
message(CHECK_PASS "fetched")
CMake相关的“问题”: https://gitlab.kitware.com/cmake/cmake/-/issues/17735
注意:看看 https://github.com/google/or-tools/blob/master/cmake/dependencies/CMakeLists.txt(对不起,没有png)
note2:关于CMake的东西,madler zlib无需维护,请查看我的补丁;)

关于c++ - 使外部项目可用于find_package CMake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62824376/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com