// краткая версияCMake: неправильный zlib найден - как построить zlib из src (с основным проектом CMakeLists.txt) и связать его?
Как я могу сделать CMake использовать мой поставляемый Zlib (который также должен строить из источника) вместо найденного искателем, не нарушая искатель для другой LIBS (OpenGL)?
ZLib должен быть использован основной проект, а также Libpng который поставляется в качестве источника, а также.
Первичная целевая платформа - Windows.
// длинная версия:
В моем проекте мне нужно связать против Libpng, ZLIB и OpenGL. С libpng зависит от zlib. Но zlib также требуется по основному проекту.
мне нужно предоставить исходный код для всех LIBS кроме OpenGL, и построить эти библиотеки вместе с главным проектом утверждать, связывающие правильную версию и упростить строительство на Windows.
Я нашел способы сделать все это с помощью пользовательских библиотек, где нет встроенного искателя, но я не могу переопределить искатель правильно только для zlib. Если я изменил путь поиска для libs, то OpenGL не будет найден.
Однако я не могу получить cmake, чтобы использовать предоставленные мной zlib вместо rouge zlib.DLL, что искатель пакетов находит где-то в моей системе. (The one from tortoise git)
Я попытался установить ZLIB_LIBRARY на определенный путь к файлу, но это работает только на MinGW, и я также думаю, что это не способ сделать это.
(А также я должен был явно ссылку на png16_static вместо того, чтобы просто Libpng, по необъяснимой причине.)
Любая помощь по этому вопросу очень ценится. Может, я ошибаюсь?
Target & Платформа разработки:
Windows7
Visual Studio 2010
and MinGW (both need to work)
My (упрощенный пример) 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
Спасибо, что помогли! Я должен был добавить «set (SKIP_INSTALL_ALL ON)», прежде чем включать libpng, но это не проблема, так как я не хочу устанавливать его таким образом. – Rock