-1

我正在尝试通过 AppVeyor 和 cmake 为 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 来说应该是一项简单的任务。

还是我错过了什么?

任何帮助表示赞赏...

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 回答