-1

cmake を使用して AppVeyor 経由で Wi​​ndows 用のクロスプラットフォーム QT アプリケーションをコンパイルしようとしています。

Linux では、cmake は正常にコンパイルされるため、CMakeLists.txt は有効である必要があります。

AppVeyor は必要なライブラリをコンパイルしますが、これも機能します。しかし、プロジェクト CMakeLists.txt に関しては、次のエラーで失敗します。

-- Could NOT find ZLIB (missing:  ZLIB_LIBRARY ZLIB_INCLUDE_DIR) 
CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
Could NOT find PNG (missing: PNG_LIBRARY PNG_PNG_INCLUDE_DIR)
Call Stack (most recent call first):
C:/Program Files (x86)/CMake/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
C:/Program Files (x86)/CMake/share/cmake-3.5/Modules/FindPNG.cmake:157 (find_package_handle_standard_args)
CMakeLists.txt:20 (find_package)

CMakeLists.txt 内の対応する部分は次のとおりです。

find_package(PNG REQUIRED)

[...some other cmake stuff...]

# link required other libraries
include_directories(${PNG_INCLUDE_DIR} ${GSL_INCLUDE_DIRS})
target_link_libraries(projectName ${PNG_LIBRARY} ${GSL_LIBRARIES})

これは現在のビルドの失敗です: https://ci.appveyor.com/project/zebastian/mandelbulber2

使用されている CMakeLists.txt と appveyor.yml ファイルは、プロジェクト ルートの https://github.com/zebastian/mandelbulber2にあります。

FindPNG.cmake が存在するため、zlib のみが欠落しているように見えますが、これは少し奇妙に思えます。いくつかの png / zlib ソース フォルダーをダウンロードしてコンパイルするか、外部依存関係を使用することで、この問題を回避する appveyor.yml ファイルをいくつか見ましたが、これは CI の単純なタスクである必要があります。

それとも私は何かを逃していますか?

助けていただければ幸いです...

4

1 に答える 1

0

わかりました、私はこの特定の問題の解決策を見つけました:

Windows には、この種の依存関係を解決するための nuget と呼ばれるパッケージ マネージャーがあり、appveyor でも非常にうまく機能します。libpng をインストールするには、次のコマンドを使用しました。

#packages from nuget
- nuget install zlib-msvc14-x64-master -Version 1.2.8.4 -Source https://ci.appveyor.com/nuget/zlib-shallow-x0n34b3pfq1b
- ps: move zlib*\* deps -force
- move deps\zlibstatic.lib deps\zlib.lib
- nuget install libpng-msvc14-x64-master -Version 1.6.18.44 -Source https://ci.appveyor.com/nuget/libpng-7hwq4pmmrc48
- ps: move libpng*\* deps -force
- move deps\libpng16_static.lib deps\png.lib

ps と move は、物を移動するためだけのものです。私にとって、これは合理的な解決策のように思われ、退屈な自己コンパイルから一部の人々を救うかもしれません.

ウィンドウが占有され、4 文字のプラグマと衝突すること、およびその他の msvc 固有の動作が原因で、コンパイルは依然として失敗します。しかし、それは別の日のトピックです...

于 2016-05-09T18:23:45.140 に答える