Roc*_*ock 6 mingw cmake visual-studio-2010
// 简要版本
如何让 CMake 使用我提供的zlib(它也必须从源代码构建)而不是查找器找到的zlib而不会破坏其他库(OpenGL)的查找器?
ZLib需要由主项目使用,也需要作为源代码使用libPNG。
主要目标平台是 Windows。
// 更长的版本:
在我的项目中,我需要链接libpng、zlib和OpenGL。由于libpng依赖于zlib。但主项目也需要zlib。
我需要为除OpenGL之外的所有库提供源代码,并将这些库与主项目一起构建以断言链接正确的版本并简化在 Windows 上的构建。
我找到了使用不存在内置查找器的自定义库来完成所有这些操作的方法,但是我无法仅针对 zlib 正确覆盖查找器。如果我更改库的搜索路径,则找不到 OpenGL。
但是我无法让 cmake 使用我提供的zlib而不是包查找器在我的系统中某处找到的 rouge zlib.DLL。(来自 tortoise git 的那个)
我试图将 ZLIB_LIBRARY 设置为特定的文件路径,但这仅适用于 MinGW,而且我也认为这不是这样做的方法。
(而且我不得不显式链接到 png16_static 而不仅仅是 libpng,出于莫名其妙的原因。)
非常感谢您对此的任何帮助。也许我以错误的方式接受这个?
目标&发展平台:
Windows7
Visual Studio 2010
and MinGW (both need to work)
Run Code Online (Sandbox Code Playgroud)
我的(简化示例)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})
Run Code Online (Sandbox Code Playgroud)
项目(简化示例)结构:
./main.cpp
./CMakeLists.txt
./external_libs/zlib-1.2.8/ <- contains respective source
./external_libs/lpng162/ <- contains respective source
Run Code Online (Sandbox Code Playgroud)
第三方库最有可能调用FindZLIB.cmake来确定 CMake 的位置。通过ZLIB_LIBRARY手动设置,您已经有了正确的想法,但还没有完全正确:
add_subdirectory(<path_to_zlib_src_dir>)
set(ZLIB_INCLUDE_DIR "<path_to_zlib_src_dir>" "${CMAKE_BINARY_DIR}/<path_to_zlib_build_dir>")
set(ZLIB_LIBRARY zlib)
add_subdirectory(<path_to_lpng_src_dir>)
Run Code Online (Sandbox Code Playgroud)
find_package(zlib)自己打电话以确保它按预期运行| 归档时间: |
|
| 查看次数: |
3451 次 |
| 最近记录: |