【发布时间】: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_DIR的set转换为set(... CACHE STRING "")。此外,不需要手动设置ZLIB_FOUND。在缓存中设置了ZLIB_INCLUDE_DIR和ZLIB_LIBRARY后,查找脚本应该可以按预期工作。考虑静态链接这两个库,以尽量减少与系统库的潜在冲突。