gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:14:58 29 4
gpt4 key购买 nike

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

最佳答案

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})

关于c - 如何在源代码外模式下使用 cmake 构建 zlib?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23330878/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com