繁体   English   中英

构建或编译

[英]Build or compile

关于编译和构建之间的区别,我有一个理论问题。 我正在编写一个需要花费大量时间来构建的c ++项目,所以我已经告诉要在“我修改了任何头文件”的情况下进行构建。 真的吗? 如果我在headder文件中添加一个新属性,那么我必须构建吗? 编译不够?

谢谢!

“建筑”是一个模糊的术语,通常意味着整个过程,预处理,编译和链接。 在源更改之后,必须重做这些过程的哪些部分取决于已更改的内容。 如果您只更改了单个.cpp源,则只需重新编译它并再次链接对象即可。 如果更改.h标头,则必须重新编译包含此标头的所有源文件,这通常很昂贵,因为特定于项目的标头往往包含在许多源文件中。

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

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

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

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

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

因此,您只需(重新)编译比源文件更旧的对象代码(“最近编辑过”),以链接包含程序中最新更改的可执行文件。 实际上,这就是make决定是否构建文件的方式。

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

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

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

单独编译是没有用的,因为它不会产生最终的excutable,因此你需要始终构建。

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

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

如果您更改头文件然后您必须构建,编译将只创建一个尚未成为可执行文件的新对象文件。

编译只是构建中的一个步骤。 无论何时需要重新编译,都需要重建。

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

我不确定我完全理解你的问题。

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

如果您的问题确实是否应该运行完整版本的软件,那么有时您不必更改实现(.cpp)文件,但如果您还更改了声明(即标题),那么您将最有可能需要这样做。 无论如何,您必须完全构建受影响的组件 - 而不仅仅是编译它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM