从源代码构建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
选项从仓库标签克隆。
下载发布存档
您可以从仓库的Releases页面获取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 下载页面
下载以
.sh
结尾的自解压 shell 脚本。使用
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
环境变量中可用,并可以从 shell 中执行 "cmake
"。您可以通过从命令行请求 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写入构建文件的目录。
在 mongo-c-driver
的源目录为 $SOURCE
,构建目录为 $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 选项
在多配置生成器(例如 Visual Studio)的情况下,使用 –config
选项来设置要使用的构建配置。它对其他生成器没有影响,其他生成器使用 CMAKE_BUILD_TYPE
。
安装构建结果
让 $PREFIX
为路径 $SOURCE/_install
。我们可以使用 CMake 安装构建结果
$ cmake --install "$BUILD" --prefix "$PREFIX" --config RelWithDebInfo
此命令将安装 mongo-c-driver
构建结果到 $PREFIX
目录。
提示
–config 选项
选项 --config
仅用于多配置生成器(例如 Visual Studio),否则将被忽略。为 --config
提供的值必须与 cmake --build
中的 --config
提供的值相同。
使用 libmongoc 进行配置
如果您从 为 libbson 配置 开始按照上述步骤操作,最终结果将只包含 libbson
而不是完整的 C 数据库驱动库。使用 CMake 变量 ENABLE_MONGOC
来启用/禁用 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版本列表,请参阅[此处](https://cmake.com.cn/cmake/help/latest/manual/cmake-generators.7.html#visual-studio-generators)。为了获得更好的控制和更多的工具选项,建议在Visual Studio的开发者PowerShell(推荐)或开发者命令提示符(旧版)中运行命令。 |