C++ 的包管理器
复杂的软件在其系统中需要大量的依赖项。 像 Python 这样的编译语言有 pip 来管理它们的包,但我们很少听到 C/C++ 的包管理器。
本文介绍如何安装和实现 C++ 的包管理器。
VC Package (vcpkg) - C++ 的包管理器
依赖关系从库包到第三方库各不相同,它们必须保存在虚拟环境中才能使软件系统正常工作。
本文的第一个 C++ 包管理器是 vcpkg。
本节将讨论在 Windows Visual Studio 2017 上安装和使用 VC 包管理器库管理器。VC 包最初是仅适用于 Windows 上的 Visual Studio 的包管理器。
如今,VC 包是跨平台的,可以在 Linux 和 Mac 等操作系统上运行。
要运行这个包管理器,需要三件事:
- Visual Studio
- Git
- PowerShell
下载并安装 Visual Studio 2017 或更高版本。 安装时需要注意的是,安装中包含Desktop Development with C++,必须勾选。
Visual Studio 是一个集成开发环境 (IDE),可以将包加载到代码中。 C++ 库没有中央存储库,因此大多数都分散在网上。
安装IDE后,需要将Git安装到系统中。 该软件用于分发 GitHub 上提供的众多软件包。
可以从这里下载 Git。
安装Git
在第一个设置页面上,确保选中 Windows 资源管理器集成的两个复选框。 这将使 Git 能够从 Windows 资源管理器中的任何目录执行。
在第一页之后选择 Git 安装程序中的所有推荐选项是有益的。 安装后,每次右键单击光标时,加载 Git bash 的选项都会出现在对话框中。
安装PowerShell
PowerShell 是一个用于配置系统的命令行框架。 克隆后需要构建VC包。
PowerShell 可以从这里下载。 建议下载 Msi 软件包,因为它是自动安装程序。
安装VC包
有两种方法可以执行此操作:
一、 克隆 Git 存储库
克隆 Git 存储库时,它会在本地系统内创建一个与存储库内的目录类似的目录,但仅包含必要的包。 然后使用 PowerShell 在系统内部构建该包。
要克隆 vcpkg 存储库,请从 GitHub 网页复制 HTTPS 链接。
复制链接后,在 C 盘中创建一个文件夹 dev 或 src,并通过右键单击该目录并单击 PowerShell 7 > 以管理员身份在此处打开来克隆该目录。
PowerShell 命令提示符会在该目录内打开。 在其中写入以下命令:
git clone https://github.com/microsoft/vcpkg.git
上面的命令将 VC 包克隆到我们在 C 盘内创建的 dev 文件夹中。 克隆完成后,输入以下命令进入克隆目录:
cd cvpkg
二、 提取档案
此方法需要从 GitHub 网页下载存档并手动将内容解压到 C 盘的 dev 文件夹中。 提取存档后,进入目录,右键单击,然后以管理员身份打开 PowerShell。
无论采用上述两种方法,创建目录后步骤都是一样的。
在该目录内,系统需要构建包。 这将通过使用 PowerShell 引导构建器来完成。
.\bootstrap-vcpkg.bat
以下命令将使 VC 包中的所有库可用于 Visual Studio:
.\vcpkg integrate install
至此,VC Package就安装到机器上了。
现在,如果需要特定的库,例如 sql3,可以使用以下命令进行检查:
.\vcpkg search sqlite3
如果搜索到的包可用,它将显示在屏幕上。
要安装该软件包,请键入命令:
.\vcpkg install sqlite3
默认情况下,VC Package 安装该库的 32 位版本。 要安装 64 位,请使用以下命令:
.\vcpkg install sqlite3:x64-windows
使用 Visual Studio 中安装的库
首先创建一个 C++ 空项目并启用控制台子系统选项。
要启用控制台子系统,请右键单击解决方案资源管理器中的项目,然后单击“属性”。 在“属性”内,转到左侧面板中的“链接器”>“系统”。
子系统可以作为第一个选项找到。
现在可以使用 VC 包来加载库并在 Visual Studio 中使用它们。 让我们用 C++ 编写一个 SQL 程序来检查导入的包是否正常工作。
#include <iostream>
#include <sqlite3.h>
int main() {
sqlite3* db;
int fd = sqlite3_open("mydb.db", &db);
if (fd == SQLITE_OK) {
std::cout << "Success opening the database.\n";
}
else {
std::cerr << "Error:\n";
std::cerr << sqlite3_errmsg(db) << '\n';
exit(1);
}
sqlite3_close(db);
}
输出:
Success opening the database.
C:\Users\Win 10\source\repos\testsqlite3\x64\Debug\testsqlite3.exe (process 14648) exited with code 0.
Press any key to close this window . . .
C++ 的 Bpt 包管理器
C/C++ 的另一个包管理器是 GitHub 和 Bpt 网站上提供的构建和打包工具。 该包管理器的安装与vcpkg类似,但不能在IDE上运行; 它必须独立运行。
安装 Bpt 包管理器
Bpt 可以从 GitHub 克隆,也可以从此处下载其安装程序。
Bpt是一个独立的应用程序,因此不需要在系统内部构建。 不过,它的可执行文件必须放置在 Windows 的用户路径中。
要将 Bpt 添加到文件路径中,请将 .exe 文件移动到 C:\ 驱动器中的目录,最好是 C:\dev\bpt 等子目录,然后将此文件路径粘贴到环境系统变量中的用户变量。
要转到用户变量,请右键单击“此电脑 Windows 10 或更高版本”,然后单击“属性”。 在新窗口中,转到高级系统设置>环境变量。
在“环境变量”内,选择上方“用户变量”部分的路径,然后单击“编辑...”
最后,单击“新建”,粘贴文件路径,然后在所有打开的对话框中单击“确定”。
如果操作正确,Bpt 将被添加到用户变量中,并且可以从命令提示符进行访问。 要检查,请编写命令:
bpt --help
它将显示 Bpt 命令列表。
创建一个 Hello World 程序
bpt new 命令可用于创建一个非常简单的项目:
bpt new hello-bpt
bpt 会问一些问题。 暂时使用默认即可。
这将创建一个名为 hello-bpt/ 的新目录和一个名为 hello-bpt 的新项目。 bpt new 默认情况下会在与项目本身同名的子目录中创建项目。
Bpt 将在新项目目录中生成 src/ 目录和 bpt.yaml 文件。 如果您决定拆分标头和源代码,它还会生成一个 include/ 目录。
项目的信息在 bpt.yaml 文件中声明,Bpt 将使用该文件来创建、打包、测试和分发项目。
该项目的源代码保存在 src/ (可能还有 include/)子目录下。 当您将源文件添加到这些目录(包括这些顶级目录的任何嵌套子目录)时,Bpt 将查找并编译它们。
目录 src/ 和 include/ 是源根目录。
为程序创建一个入口点
必须在源根目录中创建一个具有正确文件扩展名的文件,才能将源文件添加到我们的项目中。 在此示例中,源文件被添加到源根目录 root>/src/。
另外,由于我们希望开发一个程序,因此必须指出源文件包含一个 main() 函数,该函数作为应用程序的入口点。 为此,请将 .main 添加到文件扩展名。
创建一个类似 - <root>/src/hello-app.main.cpp
的文件,并将代码放入其中:
#include <iostream>
int main() {
std::cout << "Build Complete"
}
编译程序
Bpt 详细介绍了编译程序的编程工具链。 Bpt 中的一些内置工具链选择可以立即使用,并且可以满足我们的需求。
如果程序使用GCC编译,则工具链名称为:gcc;如果程序使用Clang和Microsoft Visual C++编译,则分别需要使用工具链名称:clang和msvc。
运行 bpt build 命令(如下例所示)来执行构建,并使用工具链的正确工具链名称。
bpt build -t :gcc
如果一切按计划进行,Bpt 将发出有关编译和链接过程的详细信息并干净地退出。
构建结果的默认位置是包根目录下名为 _build
的目录。 此目录包含名为 hello-app 的可执行文件(如果在 Windows 上,则带有 .exe 后缀)。
运行可执行文件将显示输出:
> ./_build/hello-app
Build Complete
总结
本文介绍了两个著名的 C++ 包管理器 vcpkg 和 Bpt。 读完本文后,读者可以轻松下载、安装和配置这些包管理器。
相关文章
C++ 中的取消引用指针
发布时间:2023/08/20 浏览次数:139 分类:C++
-
本文简要讨论 C++ 中取消引用指针。在进入我们的实际主题之前,我们首先需要了解指针是什么以及为什么 C++ 程序员需要它。
C++ 中 *& 和 **& 的功能和区别
发布时间:2023/08/20 浏览次数:194 分类:C++
-
本文解释了 C++ 中 *& 和 **& 的区别和功能。 要理解这些符号,需要熟悉C++中指针的概念。C++ 中 *& 和 **& 的功能和区别
在 C++ 中使用指针交换两个数字
发布时间:2023/08/20 浏览次数:130 分类:C++
-
指针是 C++ 编程语言中的一个基本概念。 它们用于访问和操作计算机的内存。它们可以指向任何数据类型,包括数组、结构或函数。 指针是 C++ 中最强大的工具之一,因为它们允许程序员在运行
C++ 中 unique_ptr 的声明和使用
发布时间:2023/08/20 浏览次数:89 分类:C++
-
指针在 C++ 中有许多有用的用途。 从节省程序空间到帮助实现数据结构,指针对于 C 和 C++ 等编程语言来说是非常重要的工具。本文将讨论这样一种指针的概念,即唯一指针。 C++标准库提供了该
C++ 中的悬空指针
发布时间:2023/08/20 浏览次数:200 分类:C++
-
本文将讨论什么是悬空指针。C++ 中的悬空指针 悬空指针是指向不再存在的对象的指针(引用)。 当对象被删除时,指针指向它原来所在的内存地址。
在 C++ 中 using 与 typedef
发布时间:2023/08/20 浏览次数:138 分类:C++
-
本文试图区分 typedef 和 using。 在 C++ 函数式编程中,这些关键字具有相同的目的和语义,它们之间的差异非常小。本文将解释不同上下文中的关键字,以确保读者理解这些关键字的作用以及 t
C++ 中函数指针的 Typedef
发布时间:2023/08/20 浏览次数:54 分类:C++
-
本文将解释 C/C++ 中 typedef 的用途。 我们将进一步讨论如何将 typedef 与函数指针一起使用以及使用它的好处是什么。我们首先讨论 typedef 及其常见用途。typedef 关键字
使用 C++ 检测 Windows 中的按键
发布时间:2023/08/19 浏览次数:127 分类:C++
-
本文将讨论如何使用 C++ 处理 Windows 应用程序中的按键。 在进一步讨论之前,我们将简要介绍一下使用 C++ 的 Windows 应用程序。使用 C++ 的 Windows 应用程序类型