//簡略版CMake:發現了錯誤的zlib - 如何從src構建zlib(使用主項目CMakeLists.txt)並鏈接它?
如何使CMake的使用我提供的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
謝謝,幫助!在包含libpng之前,我必須添加「set(SKIP_INSTALL_ALL ON)」,但這不是問題,因爲我不想以任何方式安裝它。 – Rock