【问题标题】:How to use cmake find_package() with a local copy of the package?如何将 cmake find_package() 与包的本地副本一起使用?
【发布时间】:2014-10-03 16:59:19
【问题描述】:

我正在尝试制作一个同时具有 ZLIB 和 LIBPNG(以及其他库)的项目。 LibPNG 的 CMakeLists.txt 文件里面有这个:find_package(ZLIB REQUIRED) 这是自带的股票代码,我不想改。

我正在 Windows (Visual Studio) 上构建。这是一个跨平台应用程序(Windows、Mac、Linux 和移动设备)我不能依赖任何库的 /usr/lib 版本。所以我用我的项目一起构建它们。

除非我破解它,否则我无法构建 LibPNG。在上层 CMakeLists.txt 文件中,我把它放在那里:

ADD_SUBDIRECTORY(contrib/${CUSTOM_ZLIB_LOCATION})
SET(ZLIB_FOUND ON CACHE BOOL "Yes")
SET(ZLIB_INCLUDE_DIR ${CMAKE_BINARY_DIR}/contrib/${CUSTOM_ZLIB_LOCATION} {CMAKE_SOURCE_DIR}/contrib/${CUSTOM_ZLIB_LOCATION})
SET(ZLIB_LIBRARY zlib CACHE STRING "zlib library name")

这满足 find_package(ZLIB REQUIRED) 但我认为这是一个 hack。有没有一些直接的方法来构建 zlib 的本地副本而不需要所有 3 额外的行?

【问题讨论】:

  • 是的。没有为我做任何事。也许我做错了?
  • 我使用与您相同的方法在我的一个项目中构建 zlib/libpng,到目前为止没有任何问题。两个小问题:您也应该将ZLIB_INCLUDE_DIRset 转换为set(... CACHE STRING "")。此外,不需要手动设置ZLIB_FOUND。在缓存中设置了ZLIB_INCLUDE_DIRZLIB_LIBRARY 后,查找脚本应该可以按预期工作。考虑静态链接这两个库,以尽量减少与系统库的潜在冲突。

标签: cmake zlib libpng


【解决方案1】:

我只在开头添加了这一行(至少在find_package(ZLIB REQUIRED) 之前),它对我有用。

set(ZLIB_ROOT <zlib folder here>)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多