如何使用cmake find_package()与包的本地副本?

时间:2014-08-10 22:19:25

标签: cmake zlib libpng

我正在尝试创建一个既包含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)但我认为这是一个黑客。是否有一些直接的方法来构建zlib的本地副本而没有所有3条额外的行?

1 个答案:

答案 0 :(得分:6)

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

set(ZLIB_ROOT <zlib folder here>)