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

时间:2014-04-28 00:45:26

标签: 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 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。

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

1 个答案:

答案 0 :(得分:5)

zlib的源外构建很好。您所做的是:创建一个新的根CMakeLists.txt,然后使用zlib源目录作为子目录。这不起作用。问题可能是使用CMake变量CMAKE_SOURCE_DIR而不是CMAKE_CURRENT_SOURCE_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})