构建或编译

Build or compile

本文关键字:编译 构建      更新时间:2023-10-16

我有一个关于编译和构建之间区别的理论问题。我在一个c++项目中编程,需要花很多时间来构建,所以我告诉只在"我修改了任何头文件"的情况下进行构建。这是真的吗?如果我在头文件中添加新属性,那么我必须构建吗?是不是编译不够?

谢谢!

"构建"是一个模糊的术语,通常指整个过程,预处理,编译和链接。在源更改之后,这些流程的哪些部分必须重做取决于更改了什么。如果您只更改了单个.cpp源,那么重新编译它并再次链接对象就足够了。如果您更改.h头文件,所有包含此头文件的源文件都必须重新编译,这通常是昂贵的,因为特定于项目的头文件往往包含在许多源文件中。

简而言之,如果您对源代码进行了更改,那么受此影响的所有文件都必须重新编译,并且必须重新链接整个二进制文件。

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

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

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

取自编译代码和可执行代码的区别是什么?

因此,您只需要(重新)编译比源文件更旧的("最近编辑的")目标代码来链接包含程序中最新更改的可执行文件。事实上,这就是make如何决定是否建立一个文件。

编译是将高级代码转换为机器代码的过程

构建是将高级语言转换为可执行文件的过程。这将涉及编译和链接。

在修改头文件的情况下,头文件可能会影响几个c++文件,因此要获得最终的可执行文件,您需要构建它

单独编译是没有用的,因为它不会产生最终的可执行文件,因此您需要始终构建

Build是将源代码转换为可执行文件的完整过程,对于c++编译是将源代码转换为目标代码。在构建中,c++代码将被编译,然后您将需要其他阶段,包括链接阶段来构建可执行文件。构建还可以涉及其他步骤,例如,在编译之前预处理或生成源代码文件。

在"我修改了任何头文件"的情况下进行构建只是意味着只有包含(直接或通过其他包含的文件)的文件被编译,然后所有对象都被链接。在"完整"构建中,所有文件都将被编译,因此这将减少要编译的文件数量并减少总体构建时间。

如果你改变了头文件,那么你必须编译,编译只会创建一个新的目标文件,它还不是可执行文件的一部分。

编译只是构建过程中的一个步骤。任何时候需要重新编译,都需要重新编译。

编译只获取源文件及其包含的头文件,并为每个源文件生成一个目标文件。构建还将这些文件链接在一起以创建可执行文件。因此,如果您更改了源文件,如果您想要测试一个新的可执行文件,则需要构建。编译只会让你完成一部分。

我不太明白你的问题。

编译只是构建过程的一部分(构建过程包括预处理、编译、链接以及可能的其他过程)。它创建目标文件,然后链接器将其链接到可执行文件中,因此仅编译是不够的。

如果你的问题真的是你是否应该运行你的软件的完整构建,那么有时你不需要如果你只改变了实现(.cpp)文件,但如果你也改变了声明(即头文件),那么你很可能需要这样做。在任何情况下,您都必须完全构建受影响的组件——而不仅仅是编译它。