使用 Conan 构建简单的 Meson 项目¶
在本例中,我们将创建一个字符串压缩器应用程序,该应用程序使用最流行的 C++ 库之一:Zlib。
注意
本示例基于主要的 使用 Conan 构建简单的 CMake 项目 教程。 因此,我们强烈建议您在尝试此教程之前先阅读它。
在这种情况下,我们将使用 Meson 作为构建系统,并将 pkg-config 作为辅助工具,因此在继续此示例之前,您应该先安装它们。
请先克隆源代码以重新创建此项目。 您可以在 GitHub 的 examples2 存储库中找到它们
$ git clone https://github.com/conan-io/examples2.git
$ cd examples2/examples/tools/meson/mesontoolchain/simple_meson_project
我们从一个非常简单的 C 语言项目开始,其结构如下
.
├── meson.build
└── src
└── main.c
该项目包含一个基本的 *meson.build* 文件,其中包含 **zlib** 依赖项,以及 *main.c* 中字符串压缩器程序的源代码。
让我们看一下 *main.c* 文件
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <zlib.h>
int main(void) {
char buffer_in [256] = {"Conan is a MIT-licensed, Open Source package manager for C and C++ development "
"for C and C++ development, allowing development teams to easily and efficiently "
"manage their packages and dependencies across platforms and build systems."};
char buffer_out [256] = {0};
z_stream defstream;
defstream.zalloc = Z_NULL;
defstream.zfree = Z_NULL;
defstream.opaque = Z_NULL;
defstream.avail_in = (uInt) strlen(buffer_in);
defstream.next_in = (Bytef *) buffer_in;
defstream.avail_out = (uInt) sizeof(buffer_out);
defstream.next_out = (Bytef *) buffer_out;
deflateInit(&defstream, Z_BEST_COMPRESSION);
deflate(&defstream, Z_FINISH);
deflateEnd(&defstream);
printf("Uncompressed size is: %lu\n", strlen(buffer_in));
printf("Compressed size is: %lu\n", strlen(buffer_out));
printf("ZLIB VERSION: %s\n", zlibVersion());
return EXIT_SUCCESS;
}
另外,*meson.build* 的内容是
project('tutorial', 'c')
zlib = dependency('zlib', version : '1.2.11')
executable('compressor', 'src/main.c', dependencies: zlib)
让我们创建一个包含以下内容的 *conanfile.txt* 来安装 **Zlib**
[requires]
zlib/1.2.11
[generators]
PkgConfigDeps
MesonToolchain
在这种情况下,我们将使用 PkgConfigDeps 生成有关 **Zlib** 库文件安装位置的信息,这要归功于 <cite>*.pc</cite> 文件和 MesonToolchain,它使用 <cite>conan_meson_[native|cross].ini</cite> 文件将构建信息传递给 *Meson*,该文件描述了本机/交叉编译环境,在本例中是一个 <cite>conan_meson_native.ini</cite> 文件。
我们将使用 Conan 来安装 **Zlib** 并生成 Meson 需要的文件以查找此库并构建我们的项目。 我们将在 *build* 文件夹中生成这些文件。 为此,请运行
$ conan install . --output-folder=build --build=missing
现在我们准备好构建并运行我们的 **compressor** 应用程序了
$ cd build
$ meson setup --native-file conan_meson_native.ini .. meson-src
$ meson compile -C meson-src
$ meson-src\compressor.exe
Uncompressed size is: 233
Compressed size is: 147
ZLIB VERSION: 1.2.11
$ cd build
$ meson setup --native-file conan_meson_native.ini .. meson-src
$ meson compile -C meson-src
$ ./meson-src/compressor
Uncompressed size is: 233
Compressed size is: 147
ZLIB VERSION: 1.2.11