AppVeyor c ++ cmake PNG包编译错误

时间:2016-05-02 21:51:41

标签: c++ cmake zlib libpng appveyor

我正在尝试使用cmake通过AppVeyor为Windows编译跨平台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,这看起来有点奇怪。 我已经看到了几个appveyor.yml文件,通过下载和编译一些png / zlib源文件夹或使用外部依赖项来解决这个问题,但恕我直言,这应该是CI的一个简单任务。

或者我错过了什么?

任何帮助表示赞赏...

1 个答案:

答案 0 :(得分: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仅用于移动物体。对我来说,这似乎是一个合理的解决方案,可能会使一些人免于繁琐的自我编译。

由于Windows占用并与4个字母的pragma冲突以及其他msvc特定行为,编译仍然失败。但那是另一天的话题......