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 程序,请使用此流程:

步骤

  1. GNU Compiler Collection 调用 C 编译器,将源代码编译到二进制中:

    gcc -g -o cello cello.c
  2. 执行生成的输出二进制 cello

    $ ./cello
    Hello World

2.3.1.2. 自动化构建

大规模软件通常使用自动化构建,方法是创建 Makefile 文件,然后运行 GNU make 实用程序。

如果要使用自动构建来构建 cello.c 程序,请使用以下步骤:

步骤

  1. 要设置自动化构建,请在与 cello.c 相同的目录中使用以下内容创建 Makefile 文件。

    Makefile

    cello:
    	gcc -g -o cello cello.c
    clean:
    	rm cello

    请注意,cello:clean: 下的行必须以一个 tab 空间开头。

  2. 要构建软件,请运行 make 命令:

    $ make
    make: 'cello' is up to date.
  3. 因为已有可用的构建,请运行 make clean 命令,然后再次运行 make 命令:

    $ make clean
    rm cello
    
    $ make
    gcc -g -o cello cello.c
    注意

    在另一个构建之后尝试构建程序无效。

    $ make
    make: 'cello' is up to date.
  4. 执行程序:

    $ ./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")

字节程序的流程因以下因素而异:

  • 编程语言
  • 语言虚拟机
  • 与该语言一起使用的工具和流程
注意

Python 通常进行字节编译,但不采用这里描述的方式。以下过程的目的并不是满足社区标准,而是为了简单过程。有关实际工作环境中的 Python 指南,请参阅打包和发布

使用这个步骤将 pello.py 编译成字节代码:

步骤

  1. 字节编译 pello.py 文件:

    $ python -m compileall pello.py
    
    $ file pello.pyc
    pello.pyc: python 2.7 byte-compiled
  2. 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