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