编译代码和可执行代码有什么区别?

我总是使用术语编译构build互换。

这些术语究竟代表什么?

编译是将源代码转换为目标代码的行为。

链接是将目标代码和库结合成原始可执行文件的行为。

构build是由编译和链接组成的序列,可能还有其他任务,如安装程序创build。

编译源代码后,许多编译器自动处理链接步骤。

从维基百科 :

在计算机软件领域,术语“软件构build”是指将源代码文件转换为可以在计算机上运行的独立软件工件的过程,或者是这样做的结果。 软件构build最重要的步骤之一是将源代码文件转换为可执行代码的编译过程。

虽然对于简单的程序来说,这个过程由一个正在编译的文件组成,对于复杂的软件来说,源代码可能由许多文件组成,并且可能以不同的方式组合起来产生许多不同的版本。

构build可以被看作是一个脚本,它包含许多步骤 – 其中的主要步骤是编译代码。 其他人可能是

  • 运行testing
  • 报告(例如报道)
  • 静态分析
  • 之前和之后的构build步骤
  • 在特定文件上运行自定义工具
  • 创build安装
  • 标记它们并将其部署/复制到存储库

他们经常用来表示同样的事情。 然而,“构build”也可能意味着编译和链接整个应用程序(例如C和C ++)的全部过程,甚至更多,包括其他

  • 打包
  • 自动(单元和/或集成)testing
  • 安装生成
  • 安装/部署
  • 文档/网站生成
  • 报告生成(例如testing结果,覆盖范围)。

有像Maven这样的系统,它将生命周期的概念概括为几个阶段,生成不同的工件,可能使用前一阶段的结果和工件。

根据我的经验,我会说“编译”是指将一个或几个人类可读的源文件转换为字节码(C语言中的目标文件),而“构build”指定编译,链接和其他任何需要的整个过程完成整个包或项目。

大多数人可能会互换使用这些条款。 你可以看到一个细微差别:编译只是你通过编译器传递一些源文件(gcc,javac,其他)的步骤。

build设可以被视为检查源的更一般的过程,为编译的工件创build目标文件夹,检查依赖关系,select要编译的内容,运行自动化testing,创buildtar / zip / ditributions,推送到ftp等…