OpenCV - Build_ZLIB
在编译OpenCV需要链接到第三方库,OpenCV已经为我们准备并放置在3rdparty下。
这里比较特殊的是BUILD_ZLIB,在Windows下,如何设置BUILD_ZLIB为false,在编译时,依然
会编译并使用3rdparty下的zlib,发生这种现象的原因是下面的一段cmake,
位于cmake/OpenCvFindLibsGrfmt.cmake中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| # --- zlib (required) --- if(BUILD_ZLIB) ocv_clear_vars(ZLIB_FOUND) else() ocv_clear_internal_cache_vars(ZLIB_LIBRARY ZLIB_INCLUDE_DIR) if(ANDROID) set(_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) set(CMAKE_FIND_LIBRARY_SUFFIXES .so) endif() find_package(ZLIB "${MIN_VER_ZLIB}") if(ANDROID) set(CMAKE_FIND_LIBRARY_SUFFIXES ${_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) unset(_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES) endif() if(ZLIB_FOUND AND ANDROID) if(ZLIB_LIBRARIES MATCHES "/usr/lib.*/libz.so$") set(ZLIB_LIBRARIES z) endif() endif() endif()
if(NOT ZLIB_FOUND) ocv_clear_vars(ZLIB_LIBRARY ZLIB_LIBRARIES ZLIB_INCLUDE_DIR)
set(ZLIB_LIBRARY zlib CACHE INTERNAL "") add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/zlib") set(ZLIB_INCLUDE_DIR "${${ZLIB_LIBRARY}_SOURCE_DIR}" "${${ZLIB_LIBRARY}_BINARY_DIR}" CACHE INTERNAL "") set(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR}) set(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
ocv_parse_header2(ZLIB "${${ZLIB_LIBRARY}_SOURCE_DIR}/zlib.h" ZLIB_VERSION) endif()
|
从上面的cmake片段我们可以知道,zlib在OpenCV的编译中是必须的,默认,BUILD_ZLIB设置
为true,这时,ZLIB_FOUND会被清理,总是会进入第二个if(NOT ZLIB_FOUND), add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/zlib")。如果将BUILD_ZLIB
设置为false,则会先进入第一个if(BUILD_ZLIB)的else中,尝试通过find_package(ZLIB "${MIN_VER_ZLIB}")
查找系统中的zlib(这也是为什么在MacOS中设置BUILD_ZLIB=false会起作用,因为zlib已经
成为MacOS的一部分)