从源代码构建 C 驱动程序库
本页详细介绍了如何从源代码下载、解压缩、配置和构建 libbson
和 libmongoc
库。
提示
额外信息
警告(像这样的警告)包含完成本教程不需要的额外的信息和解释性细节,但可能对好奇的读者和需要解释某些教程步骤含义的高级用户有所帮助。
以下页面使用一些命名变量来表示配置信息,例如 $VERSION
。在开始教程之前,您必须为这些变量选择值。当您看到教程步骤中引用的变量时,请用您的值替换该变量。
选择版本
开始之前,请了解要下载哪个版本的mongo-c-driver
。您可以在 GitHub存储库标签页面 找到可用版本的列表。本教程记录了当前的驾驶员版本 v1 。29 。0 。
在本页的其余部分中, $VERSION
将指您将为本教程构建的mongo-c-driver
的版本号。
获取源代码
通过以下方式之一获取 mongo-c-driver
源代码:
使用
git
克隆存储库(推荐)。有关更多信息,请参阅使用 Git 下载。
重要
强烈建议新用户使用驾驶员的稳定发布版本,而不是从开发分支进行构建。 当您git clone
或下载存储库的存档时,请务必指定发布标签(例如使用 Git 的--branch
参数)。
使用 Git 下载
您可以使用 Git 从 GitHub 克隆C驾驶员存储库。已发布版本的 Git 标记以其对应的版本命名(例如“1 .29 .0 ”)。要命令行克隆存储库,请使用以下命令:
$ git clone https://github.com/mongodb/mongo-c-driver.git --branch="$VERSION" "$SOURCE"
提示
尽管有其名称,但您可以使用 git-clone
命令的 --branch
选项从存储库标签进行克隆。
下载版本存档
您可以从存储库的“版本”页面获取C驾驶员存储库的存档快照。每个发布都包含一个mongo-c-driver-x.y.z.tar.gz
存档,其中包含构建所需的最小文件设立。
## Download using wget: $ wget "https://github.com/mongodb/mongo-c-driver/archive/refs/tags/$VERSION.tar.gz" \ --output-document="mongo-c-driver-$VERSION.tar.gz" ## Extract using tar: $ tar xf "mongo-c-driver-$VERSION.tar.gz"
前面的命令会在运行这些命令的目录中创建 mongo-c-driver-$VERSION
目录,该目录是驾驶员源代码树的根目录。本文档将此目录称为 $SOURCE
。 $SOURCE
目录包含顶级 CMakeLists.txt
文件。
## Using curl: $ curl "https://github.com/mongodb/mongo-c-driver/archive/refs/tags/$VERSION.tar.gz" \ --output="mongo-c-driver-$VERSION.tar.gz" ## Extract using tar: $ tar xf "mongo-c-driver-$VERSION.tar.gz"
前面的命令会在运行这些命令的目录中创建 mongo-c-driver-$VERSION
目录,该目录是驾驶员源代码树的根目录。本文档将此目录称为 $SOURCE
。 $SOURCE
目录包含顶级 CMakeLists.txt
文件。
## Use Invoke-WebRequest: PS> $url = "https://github.com/mongodb/mongo-c-driver/archive/refs/tags/$VERSION.zip" PS> $file = "mongo-c-driver-$VERSION.zip" PS> Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $file ## Extract using Expand-Archive: PS> Expand-Archive mongo-c-driver-$VERSION.zip
前面的命令会在运行这些命令的目录中创建 mongo-c-driver-$VERSION
目录。 mongo-c-driver-$VERSION
目录包含第二个 mongo-c-driver-$VERSION
目录,它是驾驶员源代码树的根目录。本文档将此目录称为 $SOURCE
。 $SOURCE
目录包含顶级 CMakeLists.txt
文件。
获取先决条件
您必须安装 CMake 才能配置libmongoc
和libbson
项目。我们强烈建议您下载适用于您的平台的最新 CMake 稳定版本。
选择与操作系统对应的标签页,然后按照说明下载CMake:
访问 CMake 下载页面。
下载 CMake
.msi
或.dmg
文件并使用它来安装 CMake。
访问 CMake 下载页面
下载自解压Shell脚本,该脚本以
.sh
结尾。使用
sh
实用程序执行脚本并传递相应参数以执行安装。示例,对于x86_64
平台上的 CMake 3.27.0,运行以下命令:sh cmake-3.27.0-linux-x86_64.sh --prefix="$HOME/.local" --exclude-subdir --skip-license 假设
$HOME/.local/bin
位于您的$PATH
列表中,则3.27.0的cmake
命令将变为可用。可以将
--help
选项传递给shell脚本以获取更多信息。
本页假定 cmake
可用作 PATH
环境变量上的命令,并且可作为“cmake
”从Shell中执行。您可以通过命令行向 CMake 请求 --version
来进行测试,如以下代码所示:
cmake --version cmake version 3.21.4 CMake suite maintained and supported by Kitware (kitware.com/cmake).
注意
如果您打算仅构建libbson
,则 CMake 足以完成构建。 其他 C 驱动程序功能可能需要安装额外的外部依赖项,但我们在这里不担心这些问题。
为 libbson 配置
令名称$BUILD
为路径$SOURCE/_build
。 这将是 CMake 写入构建文件的目录。
利用位于$SOURCE
的mongo-c-driver
的源目录和构建目录$BUILD
,可以从命令行执行以下命令,以同时使用libbson
和libmongoc
配置项目:
$ cmake -S $SOURCE -B $BUILD \ -D ENABLE_EXTRA_ALIGNMENT=OFF \ -D ENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF \ -D CMAKE_BUILD_TYPE=RelWithDebInfo \ -D BUILD_VERSION="$VERSION" \ -D ENABLE_MONGOC=OFF
如果满足所有依赖项,则上述命令应成功执行并以以下内容结束:
$ cmake … ## … (Lines of output) … -- Generating done -- Build files have been written to: $BUILD
如果配置因错误而失败,请参阅 CMake 输出以获取错误消息和信息。 在继续之前确保配置成功。
提示
这些 CMake 参数是什么意思?
BUILD_VERSION
设置将包含在构建结果中的版本号。 它应设置为与获取源中下载的源驱动程序版本相同的值。
ENABLE_EXTRA_ALIGNMENT
和ENABLE_AUTOMATIC_INIT_AND_CLEANUP
是mongo-c-driver
的一部分,对应于仅出于 ABI 兼容性目的而默认启用的已弃用功能。 强烈建议尽可能禁用这些功能。
ENABLE_MONGOC=OFF
参数已禁用构建libmongoc
。 我们将在下一节中构建它。
CMAKE_BUILD_TYPE
设置告知 CMake 将生成哪种代码变体。 对于RelWithDebInfo
,将生成优化的二进制文件,但仍包含调试信息。 CMAKE_BUILD_TYPE 对多配置生成器没有影响(即Visual Studio),而在构建/安装时则依赖--config
选项。
构建项目
成功配置项目后,可以使用 CMake 执行构建:
$ cmake --build $BUILD --config RelWithDebInfo --parallel
如果配置正确并且满足所有依赖关系,则上述命令应继续编译和链接已配置的组件。 如果上述命令失败,则您的环境可能有错误,或者您使用的是不受支持/未经测试的平台。 有关更多信息,请参阅构建工具输出。
提示
--config 选项
--config
选项用于设置要在多配置生成器(即 Visual Studio)。 它对其他生成器没有影响,而这些生成器会使用CMAKE_BUILD_TYPE
。
安装构建结果
令$PREFIX
为路径$SOURCE/_install
。 我们可以使用 CMake 来安装构建结果:
$ cmake --install "$BUILD" --prefix "$PREFIX" --config RelWithDebInfo
此命令会将mongo-c-driver
构建结果安装到$PREFIX
目录中。
提示
--config 选项
--config
选项仅用于多配置生成器(即 Visual Studio),否则将被忽略。 为--config
指定的值必须与为--config
和cmake --build
指定的值相同。
使用 libmongoc 进行配置
如果您从配置 libbson开始执行上述步骤,则最终结果仅包含libbson
,而不包含完整的 C 数据库驱动程序库。 使用ENABLE_MONGOC
CMake 变量启用/禁用libmongoc
的构建。 再次重新运行 CMake,但将ENABLE_MONGOC
设置为TRUE
:
$ cmake -D ENABLE_MONGOC=ON $BUILD
如果上述命令成功,则项目已重新配置为使用libmongoc
进行构建。 再次按照“构建项目并安装构建结果”中的流程来构建和安装libmongoc
。
脚注
[1] | 如果希望使用 Xcode 配置和构建项目,则需要安装 Xcode 命令行工具并使其在环境中可用。 在命令行环境中,运行:
$PATH 上可用。 |
[2] | 如果希望使用Microsoft Visual C++配置和构建项目,则在运行任何 CMake 或构建命令时,可能需要设立Visual C++工具和环境变量。 在许多情况下,CMake 会检测 Visual Studio 安装并自动加载环境本身。 这种自动检测可以使用 CMake 的-G 、 -T 和-A 选项进行控制。 -G 选项最为重要,因为它可以选择使用哪个 Visual Studio 版本。 支持的 Visual Studio 版本取决于已安装的 CMake 版本。 可以在此处找到受支持的 Visual Studio 版本的列表。 为了获得更好的控制和更多的工具选项,建议从 Visual Studio 开发者 PowerShell (首选)或 开发者命令提示符 (旧版)中运行命令。有关详细信息,请参阅: Visual Studio 开发者命令提示符和开发者 PowerShell 并 命令行使用Microsoft C++工具集 在Microsoft Visual Studio 文档页面上。 |