如何在源代码外模式下使用cmake构建zlib?

如何在源代码外模式下使用cmake构建zlib?,c,linux,cmake,zlib,C,Linux,Cmake,Zlib,zlib无法在源代码外模式下使用cmake成功编译 我做错了什么 以下是zlib在源代码中的工作: mkdir test cd test mkdir contrib mkdir build cp /tmp/zlib-1.2.8.tar.gz contrib cd contrib tar xvf zlib-1.2.8.tar.gz cd zlib-1.2.8 rm zconf.h cmake . make 以下是zlib在源代码之外失败的原因: mkdir test cd test mkdir

zlib无法在源代码外模式下使用cmake成功编译

我做错了什么

以下是zlib在源代码中的工作:

mkdir test
cd test
mkdir contrib
mkdir build
cp /tmp/zlib-1.2.8.tar.gz contrib
cd contrib
tar xvf zlib-1.2.8.tar.gz 
cd zlib-1.2.8
rm zconf.h
cmake .
make
以下是zlib在源代码之外失败的原因:

mkdir test
cd test
mkdir contrib
mkdir build
cp /tmp/zlib-1.2.8.tar.gz contrib
cd contrib
tar xvf zlib-1.2.8.tar.gz 
cd zlib-1.2.8
rm zconf.h
cd ../../
echo -e cmake_minimum_required\(VERSION 2.6.4\)\\r\\n\
project\(MyTestApp\)\\r\\n\
\\r\\n\
add_subdirectory\(contrib/zlib-1.2.8\)\\r\\n\
> CMakeLists.txt
cd build
cmake ..
make
它失败于:

/home/blah/test/contrib/zlib-1.2.8/test/example.c:8:18: error: zlib.h: No such file or directory
注: 我在干什么?我正在寻求建立zlib的本地副本。我不想涉及系统zlib(我的项目涉及交叉编译)

我没有在/usr/include中安装zlib.h。(我卸载了zlib-devel)当我确实安装了zlib-devel包(然后它会给我一个zlib的系统安装,我不想安装),关于zlib.h的错误会发生变化,而是无法找到zconf.h


病理学是一样的。示例.c文件找不到正确的头文件。您可以从zlib附带的CMakeLists.txt文件中很好地了解这是如何发生的/为什么发生的。它构建zlib库本身的部分提到了zlib_PUBLIC_hdr,但构建示例的部分没有提到该变量。因此:它不是在本地查找头。(我在这里猜测)

zlib的源代码外构建很好。您所做的是:创建一个新的根目录
CMakeLists.txt
,然后使用zlib源目录作为子目录。这是行不通的。问题可能是使用了CMake变量
CMake\u SOURCE\u DIR
而不是
CMake\u CURRENT\u SOURCE\u DIR
。在zlib的
CMakeLists.txt
文件中,尝试用一个替换另一个

编辑:

在zlib附带的CMakeLists.txt中,找到以下行:

include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR})
并将其更改为:

include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})

example.c看起来像什么?你用的是
#include“zlib.h”
你用的是
#include
?例如.c用的是#include“zlib.h”(开箱即用)我很难说它好。因为我必须编辑zlib附带的CMakeLists.txt来完成这项工作,所以这并不算好。尝试运行上面的脚本。Zlib既可以作为独立库使用,也可以作为我们在项目中作为子包链接到的库使用。顺便说一句,你的建议奏效了。谢谢!但我想你指的是CMAKE\u CURRENT\u SOURCE\u DIR,不是CGAL。@010110101是的,我指的是CMAKE而不是CGAL。我对CGAL开发有点太投入了。:-)希望马克·阿德勒能看到这篇文章,并在zlib中做一些小的调整。:-)你应该写信给他,指出问题所在,以确保他知道。