6

// 簡単なバージョン

他のライブラリ ( OpenGL ) のファインダーを壊すことなく、ファインダーによって検出されたものではなく、提供されたzlib (これもソースからビルドする必要があります)を使用するように CMake を作成するにはどうすればよいですか?

ZLibはメイン プロジェクトで使用する必要があり、ソースとして提供されるlibPNGも使用する必要があります。

主なターゲット プラットフォームは Windows です。

// より長いバージョン:

私のプロジェクトでは、libpngzlib、およびOpenGLにリンクする必要があります。libpngはzlibに依存しています。ただし、zlibはメイン プロジェクトでも必要です。

OpenGLを除くすべてのライブラリのソースコードを提供し、それらのライブラリをメイン プロジェクトと共にビルドして、正しいバージョンのリンクをアサートし、Windows でのビルドを簡素化する必要があります。

組み込みのファインダーが存在しないカスタム ライブラリでこれらすべてを行う方法を見つけましたが、zlib だけでファインダーを適切にオーバーライドすることはできません。ライブラリの検索パスを変更すると、OpenGL が見つかりません。

ただし、パッケージファインダーがシステムのどこかで見つけたルージュzlib.DLLの代わりに、提供されたzlibをcmakeに使用させることはできません。(亀のgitからのもの)

ZLIB_LIBRARY を特定のファイルパスに設定しようとしましたが、それは MinGW でのみ機能し、これはその方法ではないと思います。

(また、説明のつかない理由で、libpng だけでなく png16_static に明示的にリンクする必要がありました。)

これに関するヘルプは大歓迎です。多分私はこれを間違った方法で取っていますか?


ターゲット&開発プラットフォーム:

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
4

1 に答える 1