微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 CMake 中的 ExternalProjects 之间添加依赖项?

如何解决如何在 CMake 中的 ExternalProjects 之间添加依赖项?

我想从源代码构建一个libpng,它需要 libz,而我又想从源代码构建。到目前为止,我有一个 CMakeLists.txt 文件,定义两个库的构建步骤的部分如下所示:

if(NOT EXISTS ${CMAKE_BINARY_DIR}/build-zlib/build/libz.a)
  file(DOWNLOAD https://www.zlib.net/zlib-1.2.11.tar.gz zlib.tar.gz TLS_VERIFY ON)
  file(ARCHIVE_EXTRACT INPUT zlib.tar.gz)
  include(ExternalProject)
  ExternalProject_Add(zlib
    SOURCE_DIR ${CMAKE_BINARY_DIR}/zlib-1.2.11
    BINARY_DIR ${CMAKE_BINARY_DIR}/build-zlib/build
    INSTALL_COMMAND cmake -E echo "Skipping install"
    CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON
  )
  message(STATUS "zlib will be built during 'make'")
endif()

if(NOT EXISTS ${CMAKE_BINARY_DIR}/build-png/build/libpng.a)
  include(ExternalProject)
  ExternalProject_Add(png
    GIT_REPOSITORY "https://github.com/glennrp/libpng.git"
    GIT_TAG "v1.6.37"
    BINARY_DIR ${CMAKE_BINARY_DIR}/build-png/build
    INSTALL_COMMAND cmake -E echo "Skipping install"
    CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON
  )
  message(STATUS "libpng will be built during 'make'")
endif()

有两个问题:第一,CMake不知道libz必须先于libpng构建。其次,即使之前构建了 libz,CMake 也不知道 libz 会放在 ${CMAKE_BINARY_DIR}/build-zlib/build 中。我想第二个问题可以通过添加 list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/build-zlib/build)解决(如果我错了,请纠正我)但是我如何处理第一个问题?我已经尝试添加 add_dependencies(png zlib),但在 libpng 之前没有构建 libz。因此,错误消息指出找不到 libz:

CMake Error at /snap/cmake/876/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。