linux内核源码中目标文件(*.o)生成的一种特殊情况

📅 2026/6/30 5:29:33
linux内核源码中目标文件(*.o)生成的一种特殊情况
我们指导linux内核源码使用Makefile文件指导编译器生成目标文件。一个源文件会不会被编译成相同名字的.o目标文件主要去看Makefile中是否有是否有对应指令最常见的如下图所示今天我要重点记录另外一种目标文件生成方式。1一个源文件编译生成同名的一个目标文件这种方式最常见如果CONFIG_MD_INEAR为y那么linear.c就会被编译成linear.o目标文件。CONFIG_MD_INEAR是在内核源码根目录下的.config文件中至于.config文件是有make menuconfig指令中用户自己配置并保存后更新的结果会记录在“.config”文件中。menuconfig中各级菜单的组织方式是由对应目录中的Kconfig中具体内容指定的Kconfig有对应格式。以上这种方式一个源文件对应一个同名的目标文件做到了一 一对应。下面让我们看一种特殊情况。2目标文件是有多个目标文件共同组成的情况。如下图所示编译生成的目标文件中有一个dm-mod.o文件但是找遍对应目录都没有dm-mod.c的源文件当时我看到这里一脸懵逼不知道怎么回事。但是我知道目标文件生成受到Makefile文件影响于是我去当前目录下的Makefile中搜索找到如下信息dm-mod后缀-y说明无条件生成dm-mod.o目标文件后面的意思是就算dm-mod.c不存在也开始可以有后面的一系列目标文件共同组成的后面的一些列目标文件最常见的就是有相同名字的源文件编译生成而且如果同名的源文件存在就一定会被编译器变成成对应目标文件。总结就是dm-mod.o目标文件是由一系列的目标文件共同组成的而非由一个名为dm-mod.c的源文件编译生成的。我们可以通过dm-mod.o目标文件大小大致得出这样的结论。