如何指定cmake的zlib头文件路径?

32

或者任何包含目录/库。

我使用cmake gui工具,运行它后通常gui会突出显示找不到的包含文件或库,并让你打开一个对话框设置路径,但是对于这个cmake配置文件,它不会这样做。它在gui工具的输出中以红色文本告诉你,因此,

CMake Error at C:/Program Files/CMake/share/cmake-3.0/Modules/FindPackageHandleStandardArgs.cmake:136 (message):
  Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
Call Stack (most recent call first):
  C:/Program Files/CMake/share/cmake-3.0/Modules/FindPackageHandleStandardArgs.cmake:343 (_FPHSA_FAILURE_MESSAGE)
  C:/Program Files/CMake/share/cmake-3.0/Modules/FindZLIB.cmake:101 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  src/CMakeLists.txt:7 (find_package)

那么,仍然使用GUI,我如何将CMake指向zlib include目录?

6个回答

26

快速解决方案:apt-get install zlib1g-dev


5
在CentOS上安装zlib-devel和zlib-static可以使用命令yum install zlib-devel zlib-static - TecHunter
27
楼主显然正在使用 Windows 操作系统。 - HiFile.app - best file manager
3
这不是一个有效的解决方案,并且在使用Ubuntu版本的Windows WSL上无效。 - Kaszanas

20

首先,我假设您已经安装了ZLib,而且我的猜测是它在一个非标准位置,因为CMake会查找它。如果这是真的,您可以在CMake-gui中设置该位置。您需要先点击顶部附近的“高级”复选框,因为FindZLIB.cmake文件有以下一行:“mark_as_advanced(ZLIB_LIBRARY ZLIB_INCLUDE_DIR)”。

现在,您应该能够看到ZLIB_LIBRARY ZLIB_INCLUDE_DIR选项,并设置正确的路径。


1
如何在没有GUI的情况下传递它?(GUI实际上是做什么的 - 它存储在哪里?或者它只是通过GUI生成构建,选项被传递给“cmake”命令?) - Tomasz Gandor
5
如果我理解问题正确的话,如果您只是调用cmake src_dir,您可以使用带有-D前缀的参数列表。在这种情况下,它应该是cmake -DZLIB_LIBRARY=/lib/path -DZLIB_INCLUDE_DIR=/include/path src_dir - StAlphonzo
我不明白。我输入了源文件夹路径、构建文件夹路径,然后点击了“高级”…… 但什么也没发生,主列表视图是空的。我应该在哪里看到ZLIB_LIBRARY和ZLIB_INCLUDE_DIR选项? - HiFile.app - best file manager
1
只有当你的CMakeLists.txt文件之一调用“FindPackage(ZLIB)”时,这些变量才会显示出来。否则,直到您获得链接错误,您的构建都不知道它需要zlib。 FindPackage调用也是自动正确设置库名称的唯一方法。有了它,您可以使用${ZLIB_LIBRARY}而不仅仅是在target_link_libraries调用中硬编码z - StAlphonzo
只有ZLIB_INCLUDE_DIR需要Advanced选项。 - Crawl.W

6

对于未来的谷歌搜索者,根据文档

包含此模块的文件可以设置 ZLIB_ROOT 为 zlib 安装路径,以告诉该模块在哪里查找。


4

当你制作和构建zlib库时,需要使用zlib.lib静态库以及zlib.hzconf.h头文件来制作minizip库。

因此,在构建zlib之后,以下是构建minizip所需的内容:

  • 在Release或Debug文件夹中,包含zlib.lib
  • zlib根目录中,包含zlib.hzconf.h头文件。

现在将 DZLIB_LIBRARYDZLIB_INCLUDE_DIR 设置为如下:

cmake -G "Visual Studio 14 2015" -A Win32 -DZLIB_LIBRARY="zlib-master\Release"  -DZLIB_INCLUDE_DIR="zlib-master"

这个解决方案对我来说非常有效,当我需要使用minizip库时,希望这能够帮助到你。

我该如何强制cmake选择静态库而非动态库? - TonySalimi

2

针对Elhanan Ilani的回答(对于像我这样的新手),应将此声明放在CMakeLists.txt文件的顶部。例如:

set(ZLIB_ROOT /home/foo/zlib-1.2.11/)
set(CURL_ROOT /home/foo/anaconda3/)

-1

在我的情况下,设置ZLIB_ROOT和ZLIB_LIBRARY

c:\zlib - include
        - lib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接