// 简要版本
如何让 CMake 使用我提供的zlib(它也必须从源代码构建)而不是查找器找到的 zlib,而不会破坏其他库(OpenGL)的查找器?
ZLib需要被主项目使用,libPNG也是源代码。
主要目标平台是 Windows。
// 更长的版本:
在我的项目中,我需要链接libpng、zlib和OpenGL。libpng依赖于zlib。但是主项目也需要zlib 。
我需要为除OpenGL之外的所有库提供源代码之外的所有库提供源代码,并将这些库与主项目一起构建,以断言链接正确的版本并简化在 Windows 上的构建。
我找到了使用不存在内置查找器的自定义库来完成所有这些操作的方法,但我无法仅针对 zlib 正确覆盖查找器。如果我更改库的搜索路径,则找不到 OpenGL。
但是,我无法让 cmake 使用我提供的zlib而不是包查找器在我的系统中某处找到的 rouge zlib.DLL。(来自乌龟 git 的那个)
我试图将 ZLIB_LIBRARY 设置为特定的文件路径,但这仅适用于 MinGW,而且我也认为这不是这样做的方法。
(而且我不得不显式链接到 png16_static 而不仅仅是 libpng,原因莫名其妙。)
非常感谢您对此的任何帮助。也许我采取了错误的方式?
目标&发展平台:
Windows7
Visual Studio 2010
and MinGW (both need to work)
我的(简化示例)CMakeLists.txt:
cmake_minimum_required (VERSION 2.6)
project (MyProject)
find_package(OpenGL)
add_executable(MyProject main.cpp)
include_directories(${INCLUDE_DIRECTORIES} "${PROJECT_BINARY_DIR}")
include_directories(${INCLUDE_DIRECTORIES} "external_libs/lpng162")
include_directories(${INCLUDE_DIRECTORIES} "external_libs/zlib-1.2.8")
include_directories(${INCLUDE_DIRECTORIES} "${PROJECT_BINARY_DIR}/external_libs/zlib-1.2.8")
add_subdirectory("external_libs/zlib-1.2.8")
link_directories(${LINK_DIRECTORIES} "${PROJECT_BINARY_DIR}/external_libs/zlib-1.2.8")
# libpng will not build correctly if this not set
set (ZLIB_ROOT "${PROJECT_SOURCE_DIR}/external_libs/zlib-1.2.8")
# manually set this to prevent cmake from finding the tortiose-git zlib.dll first
# DOES NOT WORK CORRECTLY, only with mingw32
set (ZLIB_LIBRARY "${PROJECT_BINARY_DIR}/external_libs/zlib-1.2.8/libzlib.dll")
add_subdirectory("external_libs/lpng162")
TARGET_LINK_LIBRARIES(MyProject png16_static zlib ${OPENGL_LIBRARY})
项目(简化示例)结构:
./main.cpp
./CMakeLists.txt
./external_libs/zlib-1.2.8/ <- contains respective source
./external_libs/lpng162/ <- contains respective source