如何在out-of-source模式下使用cmake构建zlib?

010*_*101 4 c linux zlib cmake

zlib将无法在out-of-source模式下使用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
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

它失败了:

/home/blah/test/contrib/zlib-1.2.8/test/example.c:8:18: error: zlib.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

注意:我在做什么?我正在寻找构建zlib的本地副本.我不想涉及系统zlib(我的项目涉及交叉编译).

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

病理是一样的.example.c文件找不到正确的头文件.您可以从zlib附带的CMakeLists.txt文件中非常清楚地知道这是如何/为什么发生的.它构建zlib库本身的部分提到了ZLIB_PUBLIC_HDRS,但它构建示例的部分没有提到该变量.因此:它不是在本地寻找标题.(我猜这里)

lri*_*eau 5

zlib的源外构建很好.您所做的是:创建一个新的根CMakeLists.txt,然后使用zlib源目录作为子目录.这不起作用.问题可能是使用CMake变量CMAKE_SOURCE_DIR而不是CMAKE_CURRENT_SOURCE_DIR.在CMakeLists.txtzlib文件中,尝试将其中一个替换为另一个.

编辑:

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

include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)

并将其更改为:

include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)

  • 我很难称之为好.由于我必须编辑zlib附带的CMakeLists.txt才能使其工作,因此不能将其归类为罚款.尝试运行上面的脚本.Zlib既可以是独立的,也可以作为我们作为项目中的子包链接的库.你的建议是BTW.谢谢!但我认为你的意思是CMAKE_CURRENT_SOURCE_DIR,而不是CGAL. (3认同)