什么是`some_name.o.cmd` 文件?

Tar*_*Tar 11 linux-kernel

some_name.o.cmd我在 Linux 内核代码中看到的文件是什么?它们是自动生成的吗?

Joh*_*ith 5

内核配置和在 Linux 2.5 中构建(我引用的部分涉及 2.5/2.6 内核中带来的更改):

一次性编译内置对象和模块,识别更改的命令行参数[...]

内核构建的主要性能问题是 make 的调用(当然大部分时间通常用于编译/链接,但此成本与所使用的构建系统无关)。make 必须读取本地 Make- 文件、一般规则和所有依赖项,并从那里找出要完成的工作。因此,优化构建系统性能的一个明显方法是避免不必要的调用。[...]

创建了一个更灵活的方案来处理 GNU make 中不断变化的命令行。实际使用非常简单,不是将命令直接写入规则的命令部分,而是将其分配给变量cmd_link_l_target,构建系统会根据需要负责执行命令,跟踪对命令行本身的更改. 实现工作如下。执行命令后,宏if_changed将命令行记录到文件中.<target>.cmd。在重建期间再次调用 make 时,它​​将包含这些.*.cmd文件。当它试图决定是否重建时L_TARGET,它会FORCE在先决条件中找到,这实际上迫使它总是重新运行规则的命令部分。

基本上,这是内核编译优化。这些文件用于防止make在不必要时工作过多。正如您在上面所读到的,some_name.o.cmd在编译some_name.o.

有关更多信息,请参阅我之前链接的文档的第 4.5 节(Linux-2.5/2.6 的 kbuild 中有什么新内容?)。