为什么我们需要目标文件?

Why do we need object files?

为什么我们需要目标文件?我已经尝试使用 g++ -o main.exe main.cpp (other files).cpp 命令 linking 多个文件,它有效。但是从网上的教程来看,需要先用命令g++ -c main.cpp (other files).cpp把文件变成*.o文件,再用g++ -o main.exe main.o (other files).o把文件一起link。如果我们可以用g++ -o main.exe main.cpp (other files).cpp做同样的事情,为什么我们需要先把文件变成*.o?

TL;DR 版本:

您不需要创建目标文件。直接编译成可执行文件就好了

长版:

您不需要在此处显式创建目标文件。但是,请注意编译器 创建这些目标文件作为每个源文件的中间文件。一旦编译器拥有所有可用的目标文件,linker 就会发挥作用并将每个函数的定义与实现(除其他事项外)进行匹配。链接器最终创建可执行文件并删除目标文件,因为您没有要求它们。

但是,您可以使用问题中所述的命令要求编译器存储这些中间文件。

如评论中所述,仅编译在上一个开发周期中发生更改的源文件几乎总是一个好习惯。这需要您为未更改的源文件提供目标文件。我只是想声明直接编译是合法.