我正在尝试制作一个同时包含ZLIB和LIBPNG(以及其他库)的项目。LibPNG的CMakeLists.txt文件中有以下代码:
我正在Windows上进行构建(使用Visual Studio)。这是一个跨平台应用程序(Windows、Mac、Linux和移动设备),我不能依赖于任何库的/usr/lib版本。因此,我将所有库与我的项目一起构建。
除非我对其进行修改,否则无法构建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_INCLUDE_DIR
的set
转换为set(... CACHE STRING "")
。此外,手动设置ZLIB_FOUND
是不必要的。只要在缓存中设置了ZLIB_INCLUDE_DIR
和ZLIB_LIBRARY
,查找脚本就应该按预期工作。考虑静态链接这两个库以最小化与系统库的潜在冲突。 - ComicSansMS