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,但它构建示例的部分没有提到该变量.因此:它不是在本地寻找标题.(我猜这里)
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)