【发布时间】:2016-08-27 19:07:27
【问题描述】:
我正在尝试使用 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 来说应该是一项简单的任务。
还是我错过了什么?
任何帮助表示赞赏...
【问题讨论】:
-
清除缓存并重新运行 CMake。如果它输出 PNG 丢失,则 CMake 无法找到它,您必须告诉 CMake 在哪里找到它。
-
从错误信息看来,CMake既找不到zlib也找不到png。这些库安装在您的 appveyor 构建中的什么位置?请注意,在 WINdows 上,您通常必须将所有库的位置提供给 CMake,而您的构建似乎没有这样做。
-
@usr1234567 谢谢,但如果构建应该在我自己的机器上进行,这将是 TODO。构建 CI AppVeyor 只需要一个描述性 yml 文件,该文件设置一个几乎裸露的 Windows 虚拟机,带有常见的构建程序/包/等。您可以在此处找到描述文件:github.com/zebastian/mandelbulber2/blob/master/.appveyor.yml 如果这个问题可以解决,那就太好了在这个 yml 文件中以一种很好的方式。所以这更像是一个 AppVeyor 的内部问题。 ComicSansMS:是的,这似乎是问题所在。但 FindPNG.cmake 似乎存在。
-
@zebastian FindPng.cmake 应该是 CMake 安装的一部分。但是,这不提供 png,它只能在系统上提供 png 时检测到 png。您仍然需要手动将 png 二进制文件放入您的 Appveyor 环境中。
标签: c++ cmake zlib libpng appveyor