是否曾有人告诉你“克隆存储库并进行构建”,但你却不知道下一步该如何操作? 别担心,即使你是新手,我们也会指导你如何在 Linux 系统上运行 GitHub 上的程序。
计算机程序的指令以文本文件的形式编写、编辑和保存。 之后,一个被称为编译器的程序会处理这些文件,生成程序的可执行版本。 指令的文本文件被称为源代码。 而可以在计算机上实际运行的程序版本则被称为二进制文件或可执行文件。
这是对过程的简化描述,但它大致描绘了实际情况。 在实践中,你会发现这个模型有各种各样的变化。 有时,文本文件会由其他程序生成。 有时,源代码在解释器中运行,无需编译,等等。
然而,所有软件项目都有一个共同的事实:源代码文件是至关重要的资产,需要得到细致的保护。
版本控制程序
一个项目中的所有源代码文件都被称为代码库。 大型项目通常会有许多开发人员同时操作同一个代码库。 因此,必须对每一次代码更改进行跟踪和识别。 如果需要,更改必须是可逆的。 如果不同的开发人员对同一个源代码文件进行修改,他们的编辑内容必须能够合并。
因此,出现一种叫做版本控制系统的软件程序来简化代码库的更改管理就不足为奇了。 版本控制系统会保存代码库中每个文件的所有历史版本,并记录、注释和跟踪每一次更改。
名为 Git 的工具
Linus Torvalds, Linux 内核的创建者,开发了一个叫做 Git 的版本控制程序,用于管理 Linux 内核的代码库。 现在,它是世界上使用最广泛的版本控制软件,有数百万用户。
在使用 Git 的情况下,项目的代码库存储在存储库中。 除了位于开发人员计算机上的本地存储库之外,通常也应该在网络上的中央服务器上有一个异地或远程存储库。
这就是 GitHub 发挥作用的地方。
GitHub 平台
GitHub 的诞生得益于 Git 的成功。 创始人看到了对安全托管远程 Git 存储库的迫切需求。 因此,他们创建了一个 提供云平台的公司,允许开发团队托管远程存储库。 截至 2019 年 4 月,GitHub 托管了超过 1 亿个存储库。
如果某个应用程序是开源项目,那么它很可能托管在 GitHub 上。 当然,还有其他存储库平台,例如 Bitbucket 和 GitLab,但是 GitHub 拥有最大份额的开源存储库。
存储库的结构
GitHub 存储库由文件夹组成,其中包含文件,最重要的就是源代码文件。 通常,存储库中还包含许多其他类型的文件,例如文档、手册页、软件许可文件、构建说明和 shell 脚本文件。 虽然没有明确规定存储库必须包含什么内容,但有一些约定俗成的习惯。
就像你熟悉一个厨房,就可以了解其他厨房的布局一样,存储库也是如此。 一旦你掌握了这些约定,你就能知道从哪里找到你需要的信息。
那么,如何将存储库的副本获取到你的计算机上,并将程序构建为可执行文件呢?
自述文件
在存储库中包含一个自述文件是一种常见的做法。 这个文件可能被称为 README、readme 或 README.md,它可能有“.md”的扩展名,也可能没有。
让我们来看看 GitHub 上 Atom 编辑器的存储库。 你会看到一个长长的文件夹和文件列表。 向下滚动,你就会看到 README.md 文件的内容。
GitHub 会自动将自述文件的内容显示在存储库的首页。 如果自述文件带有“.md”的扩展名,它会使用 Markdown 标记语言。 这允许开发人员使用样式元素,例如字体、项目符号和图像。
通常,自述文件的内容会告诉你项目是什么、使用什么类型的许可证、维护项目的人员、如何参与以及如何构建和运行应用程序。
如果它没有列出实际的构建说明,它会告诉你去哪里寻找这些信息。 此外,构建应用程序有用的其他信息,例如所需的构建工具和其他依赖项,可能会在此列出,或者提供指向相关信息的链接。
Boxes 存储库
我们的目标是克隆 Boxes 存储库,然后构建 Boxes 应用程序。
这个存储库的布局与 Atom 的布局类似。 有一个文件夹和文件列表,下方是自述文件的内容。 它遵循存储库的标准布局,但因为它是一个较小的项目,所以文件夹和文件较少。
自述文件也比较简洁。 其中有一个名为“开发”的部分。 在该部分中,有一个标题为“从源代码构建”的链接。 点击这个链接, 我们应该能找到所需的信息。
通常,你需要一些简单的侦查来导航存储库并找到所需的信息,但这并不难。 仔细阅读存储库页面上的所有内容。 有时,信息就摆在那里,只是可能没有被突出显示。
依赖项
“从源代码构建”页面有一个名为“在 Linux 上构建”的部分,这正是我们所需要的。 它指出我们必须安装 C 编译器、Bison 和 Flex。
构建说明还要求我们使用 `make` 命令,因此我们也需要安装 `make`。
所以,构建此应用程序所需的工具是 C 编译器、Bison、Flex、make 和 Git(用于将存储库克隆到计算机上)。
本文的示例基于运行 Ubuntu、Fedora 和 Manjaro Linux 发行版的计算机。 这些发行版都没有预装所有这些工具,所以需要在每个发行版上安装一些组件。
安装工具
Ubuntu 需要安装 Git、Flex、Bison 和 make。 以下是安装命令:
sudo apt-get install git
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install make
Fedora 需要安装 Flex、Bison 和 make。 以下是安装命令:
sudo dnf install flex
sudo dnf install bison
sudo dnf install make
Manjaro 需要安装 GCC 编译器、Flex 和 Bison。 以下是安装命令:
sudo pacman -Syu gcc
sudo pacman -Syu flex
sudo pacman -Syu bison
克隆存储库
每个 GitHub 存储库都有一个特定的 Web 地址,供 Git 将存储库克隆到你的计算机。 在 Boxes 存储库的主页上,有一个标有“克隆或下载”的绿色按钮。
点击按钮即可查看网址。 这是我们在克隆存储库时需要传递给 `git` 命令的地址。
切换到你想要克隆存储库的目录,然后使用以下命令。 如果你的终端窗口支持,你可以复制并粘贴网址到命令中。 在 GNOME 终端窗口中,可以使用 Ctrl+Shift+V 来粘贴。
Git 将会克隆远程存储库,并在你的计算机上创建一个本地存储库。 它会提示你正在克隆到一个名为 “boxes” 的目录中。
`boxes` 目录会在你执行 `git` 命令的目录中创建。 如果切换到 `boxes` 目录并查看其中的内容,你会看到与 GitHub 页面上相同的文件和文件夹列表。
太棒了! 我们已经成功将源代码和其他文件克隆到计算机上。 现在,我们需要构建应用程序。
构建应用程序
要构建应用程序,我们必须按照 GitHub 存储库中的说明进行操作。 有时,我们会运行特定的 shell 脚本,而有时则会运行 `make`。 我们遵循的构建说明指示我们运行 `make`。
`make` 实用程序会读取 `makefile` 文件并执行其中的指令。 这些指令告诉 `make` 如何编译程序并将它们链接在一起。 `make` 会将指令传递给编译器和其他构建工具。
说明告诉我们,需要调用 `make` 两次。 第一次调用 `make` 会构建应用程序,第二次调用则会运行一组测试。
构建说明指示我们使用的命令是:
make && make test
大量的输出信息会在终端窗口中快速滚动。 大约一分钟后,你会回到命令提示符。
部署 Boxes 应用程序
现在,应用程序已经构建完成,我们有了一个可执行的二进制文件。 我们需要将这个二进制文件复制到 `/usr/bin/` 目录中。 这能让 shell 在我们尝试使用它时找到它。
对于某些应用程序,这可能就是你所要做的全部。 在其他情况下,你可能还需要将其他文件(例如手册页和配置文件)复制到文件系统中的其他位置。 后者就是我们需要对新的应用程序做的事情,因为构建说明中明确要求了。
使用 `sudo` 来运行这些命令。 第一个命令将手册页复制到 `man1` 目录中:
sudo cp doc/boxes.1 /usr/share/man/man1
<img loading=”lazy