Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
2.3. 从源构建软件
这部分描述了如何从源代码构建软件。
对于使用编译语言编写的软件,源代码将通过构建流程生成机器代码。这个过程通常称为编译或转换,不同的语言会有所不同。所生成的构建软件可以被运行,使计算机执行程序员指定的任务。
对于使用原始解释语言编写的软件,源代码不会被构建,而是直接执行。
对于以字节编译的解释语言编写的软件,源代码将编译成字节代码,然后由语言虚拟机执行。
2.3.1. 原生编译代码
本节演示了如何将 C 语言编写的 cello.c 程序构建成可执行文件。
cello.c
#include <stdio.h>
int main(void) {
printf("Hello World\n");
return 0;
}2.3.1.1. 手动构建
如果要手动构建 cello.c 程序,请使用此流程:
步骤
从 GNU Compiler Collection 调用 C 编译器,将源代码编译到二进制中:
gcc -g -o cello cello.c
执行生成的输出二进制
cello:$ ./cello Hello World
2.3.1.2. 自动化构建
大规模软件通常使用自动化构建,方法是创建 Makefile 文件,然后运行 GNU make 实用程序。
如果要使用自动构建来构建 cello.c 程序,请使用以下步骤:
步骤
要设置自动化构建,请在与
cello.c相同的目录中使用以下内容创建Makefile文件。Makefilecello: gcc -g -o cello cello.c clean: rm cello
请注意,
cello:和clean:下的行必须以一个 tab 空间开头。要构建软件,请运行
make命令:$ make make: 'cello' is up to date.
因为已有可用的构建,请运行
make clean命令,然后再次运行make命令:$ make clean rm cello $ make gcc -g -o cello cello.c
注意在另一个构建之后尝试构建程序无效。
$ make make: 'cello' is up to date.
执行程序:
$ ./cello Hello World
您现在已手动编译程序并使用构建工具。
2.3.2. 解释代码
本节演示了如何对 Python 编写的程序进行字节编译,以及使用 bash 编写的程序的原始解析。
在下面的两个示例中,文件顶部的 #! 行称为 shebang,不是编程语言源代码的一部分。
shebang 启用文本文件作为可执行文件:系统程序加载程序解析包含 shebang 的行以获取二进制可执行文件的路径,然后用作编程语言解释器。功能要求将文本文件标记为可执行文件。
2.3.2.1. 字节编译代码
本节演示了如何将 Python 编写的 pello.py 程序编译成字节代码,然后由 Python 语言虚拟机执行。
Python 源代码也可以是原始解释器,但编译的版本速度更快。因此,RPM Packagers 更喜欢将字节版本打包为最终用户发布。
pello.py
#!/usr/bin/python3
print("Hello World")字节程序的流程因以下因素而异:
- 编程语言
- 语言虚拟机
- 与该语言一起使用的工具和流程
使用这个步骤将 pello.py 编译成字节代码:
步骤
字节编译
pello.py文件:$ python -m compileall pello.py $ file pello.pyc pello.pyc: python 2.7 byte-compiled
在
pello.pyc中执行字节代码:$ python pello.pyc Hello World
2.3.2.2. 原始解析代码
本节介绍如何使用 bash shell 内置语言编写的 bello 程序。
bello
#!/bin/bash printf "Hello World\n"
使用 shell 脚本语言(如 bash )编写的程序是原始的解释。
步骤
使含有源代码的文件可执行并运行它:
$ chmod +x bello $ ./bello Hello World