<?xml version="1.0" encoding="gbk"?>
<rss version="2.0">
  <channel>
    <title>曲径通幽论坛 - Makefile</title>
    <link>http://www.groad.net/bbs/forum.php?mod=forumdisplay&amp;fid=104</link>
    <description>Latest 20 threads of Makefile</description>
    <copyright>Copyright(C) 曲径通幽论坛</copyright>
    <generator>Discuz! Board by Comsenz Inc.</generator>
    <lastBuildDate>Mon, 25 May 2026 04:49:56 +0000</lastBuildDate>
    <ttl>60</ttl>
    <image>
      <url>http://www.groad.net/bbs/static/image/common/logo_88_31.gif</url>
      <title>曲径通幽论坛</title>
      <link>http://www.groad.net/bbs/</link>
    </image>
    <item>
      <title>万能 Makefile</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=8885</link>
      <description><![CDATA[从网上找的：]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Tue, 07 Apr 2015 03:09:13 +0000</pubDate>
    </item>
    <item>
      <title>vmlinux.o 与 modpost.c</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4244</link>
      <description><![CDATA[在编译出 vmlinux 之前，构建系统会先链接出 vmlinux.o，但这一步骤的目的并不是要将 vmlinux.o 链接进 vmlinux 中。在链接 vmlinux.o 过程中主要做两件事情：

1. ELF section (节区) 的 mismatch 检查；
2. 生成内核导出符号文件 Module.symvers (Symbol version dump ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Tue, 02 Aug 2011 10:56:29 +0000</pubDate>
    </item>
    <item>
      <title>vmlinux.o</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4190</link>
      <description><![CDATA[Makefile 对应内核版本：2.6.35.13

vmlinux.o 是生成 vmlinux 的依赖之一，在链接出 vmlinux 之前会先链接出 vmlinux.o 。

vmlinux.o 定义在顶层 Makefile 中：
[code=Makefile]vmlinux.o: $(modpost-init) $(vmlinux-main) FORCE
&#160;&#160;&#160;&#160;&#160;&amp;#16 ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Sat, 23 Jul 2011 03:59:00 +0000</pubDate>
    </item>
    <item>
      <title>lib-target</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4186</link>
      <description><![CDATA[Makefile 对应内核版本： 2.6.35.13

在编译内核时，会经常调用 scripts/Makefile.build 文件，如果其后不指定具体目标时，默认就处理它里面的 __build 这个目标：

[code=Makefile]__build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \\
&amp;#1 ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Fri, 22 Jul 2011 07:34:36 +0000</pubDate>
    </item>
    <item>
      <title>vmlinux-dirs</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4185</link>
      <description><![CDATA[Makefile 对应内核版本：2.6.35.13

在顶层 Makefiel 中可以看到 vmlinux 有如下依赖：
[code=Makefile]# vmlinux image - including updated kernel symbols
vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o $(kallsyms.o) FORCE[/mw_shl_code]

 ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Fri, 22 Jul 2011 02:46:43 +0000</pubDate>
    </item>
    <item>
      <title>filechk</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4174</link>
      <description><![CDATA[Makefile 对应内核版本：2.6.35.13

filechk 函数定义在 scripts/Kbuild.include 中：
[code=Makefile]
###
# filechk is used to check if the content of a generated file is updated.
# Sample usage:
# define filechk_sample
#       echo $KERNELRELEASE
# endef ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Thu, 21 Jul 2011 03:16:13 +0000</pubDate>
    </item>
    <item>
      <title>vmlinux-init, vmlinux-main</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4152</link>
      <description><![CDATA[Makefile 对应内核版本：2.6.35.13

vmlinux-init 和 vmlinux-main 是 vmlinux 目标的两个依赖。在顶层 Makefile 中有一段注释图：

它们的定义为：
[code=Makefile]vmlinux-init := $(head-y) $(init-y)
vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)[/m ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Tue, 19 Jul 2011 12:24:05 +0000</pubDate>
    </item>
    <item>
      <title>if_changed</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4130</link>
      <description><![CDATA[Makefile 对应内核版本：2.6.35.13

if_changed 定义在 scripts/Kbuild.include 中：
[code=Makefile]# Execute command if command has changed or prerequisite(s) are updated.
#
if_changed = $(if $(strip $(any-prereq) $(arg-check)),&#160;&#160;&#160;&#160;&amp;# ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Mon, 18 Jul 2011 03:19:21 +0000</pubDate>
    </item>
    <item>
      <title>echo_cmd 和 cmd</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4128</link>
      <description><![CDATA[Makefile 对应内核版本：2.6.35.13

echo_cmd 和 cmd 都定义在 Kbuild.include 中：
[code=Makefile]# echo command.
# Short version is used, if $(quiet) equals `quiet_\', otherwise full one.
echo-cmd = $(if $($(quiet)cmd_$(1)),\\
        echo \'  $(call escsq ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Sun, 17 Jul 2011 13:42:43 +0000</pubDate>
    </item>
    <item>
      <title>make-cmd,escsq</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4124</link>
      <description><![CDATA[Makefile 对应内核版本：2.6.35.13

escsq 和 make-cmd 定义在 scripts/Kbuild.include 中：
escsq:
[code=Makefile]
squote  := \'
###
# Escape single quote for use in echo statements
escsq = $(subst $(squote),\'\\$(squote)\',$1)
[/mw_shl_code]

make-cmd:
[code ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Sun, 17 Jul 2011 11:49:35 +0000</pubDate>
    </item>
    <item>
      <title>auto.conf, auto.conf.cmd, autoconf.h</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4104</link>
      <description><![CDATA[Makefile 对应内核版本：2.6.35.13

在编译构建性目标时(如 make vmlinux)，顶层 Makefile 的 $(dot-config) 变量值为 1 。

在顶层 Makefile 的 497-504 行看到：
[code=Makefile]ifeq ($(dot-config),1)
# Read in config
-include include/config/auto.conf

ifeq ($ ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Fri, 15 Jul 2011 07:38:52 +0000</pubDate>
    </item>
    <item>
      <title>meneconfig 相关符号说明及 Kconfig 中的 select</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4085</link>
      <description><![CDATA[在 make menuconfig 产生的菜单中会看到 [ ], { }, ( )，&lt; &gt;等符号，它们的意思如下：

[ ] ：在方括号里，只能选择 * (built-in)和 不选择。

( ) ： 在圆括号里，允许输入相关参数。 (对应于 Kconfig 中的 string, int hex)

{ } ：在花括号里，只能选择 M (以模块方 ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Wed, 13 Jul 2011 12:44:26 +0000</pubDate>
    </item>
    <item>
      <title>Kconfig 中的 tristate, depends on 与 if</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4084</link>
      <description><![CDATA[Kconfig 对应内核版本：2.6.35.13

在 Kconfig 中， tristate 表示三态性，即：
 \&quot;M\&quot; -- 以模块方式加载到内核
\&quot;y“ -- 直接编译进内核
\&quot;n\&quot; -- 不选。

下面看一个实例：
在 init/Kconfig 中看到：
 
”Kernel .config support“ 这一行提示符会在 make menuconfig 产生 ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Wed, 13 Jul 2011 06:47:47 +0000</pubDate>
    </item>
    <item>
      <title>Linux Kbuild 文档</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4083</link>
      <description><![CDATA[1.1 概述
Linux 内核源代码组织了一个配置系统，该配置系统可以生成内核配置菜单，方便内核配置。配置系统主要包含Makefile、Kconfig和配置工具，可以生成配置界面。其中，配置界面是通过配置工具来生成的，配置工具通过 Makefile 编译执行，配置界面中的选项则是通过 ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Wed, 13 Jul 2011 02:42:58 +0000</pubDate>
    </item>
    <item>
      <title>make 与 make all</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4031</link>
      <description><![CDATA[Makefile 对应内核版本： 2.6.35.13

在编译内核时，我们看下只是简单的执行 make 命令时都会做些什么，而执行时 make all 命令时又和只执行 make 时有什么不同。

在只是执行 make 时，因为没有明确指定目标，所以 $(MAKECMDGOALS) 变量为空，此时 Makefile 几个变量的 ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Thu, 07 Jul 2011 12:14:40 +0000</pubDate>
    </item>
    <item>
      <title>目标指定变量(Target-specific Variable)</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4006</link>
      <description><![CDATA[在 Makefile 中定义的变量对当前 Makefile 中所有的规则都是有效的，它们就如同是一个“全局变量” ，如果希望在别的 Makefile 文件中也能有效，那么需要用 \&quot;export\&quot; 将它们导出(像 $@, @&lt; 这些自动化变量除外)。

在 Makefile 中还有一种特殊的，并称之为 \&quot;目标制定变 ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Wed, 06 Jul 2011 03:18:57 +0000</pubDate>
    </item>
    <item>
      <title>$+,$*,$(@D),$(@F),$(*D),$(*F),$(%D),$(%F),$(%D),$(%F),$(&lt;D),$(&lt;F),$(^D)</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=3960</link>
      <description><![CDATA[$+：
$^ 表示所有依赖文件列表。一个文件可重复出现在目标的依赖中，$^ 只记录它的一次引用情况，也就是说 $^ 会去掉重复的依赖文件。$+ 类似于 $^，但它保留了依赖文件中重复出现的文件。下面举例说明这两个变量的区别。

先在一个目录下建立&#160;&#160;3 个文件：


 ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Fri, 01 Jul 2011 09:44:32 +0000</pubDate>
    </item>
    <item>
      <title>if_changed_rule/cc_o_c/any-prereq/arg-check</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=3959</link>
      <description><![CDATA[Makefile 对应内核版本：2.6.35.13
在 scripts/Makefile.build 的 86 行看到 builtin-target 的定义：
[code=Makefile]builtin-target := $(obj)/built-in.o[/mw_shl_code]
builtin-target 是一个 builtin-in.o 文件。在 297 行中看到：
[code=Makefile]$(builtin-targe ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Fri, 01 Jul 2011 07:01:28 +0000</pubDate>
    </item>
    <item>
      <title>+/- 符号</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=3939</link>
      <description><![CDATA[make 通常会在命令运行结束后检查命令的执行的返回状态，如果返回成功，那么就启动一个子 shell 来执行下一条命令；如果在中途检测到有执行出错的情况(返回非 0 状态)，那么就会放弃对当前规则后续命令的执行，甚至会终止所有规则的执行。但在某些情况下，规则中一个命 ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Thu, 30 Jun 2011 08:23:59 +0000</pubDate>
    </item>
    <item>
      <title>跟踪 &quot;You have not yet configured your kernel!&quot; 错误</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=3918</link>
      <description><![CDATA[Makefile 对应内核版本：2.6.35.13

在未配置内核时(没有 .config 这样的配置文件) 就执行如 make vmlinux 这样的构建命令会看到下面的错误提示：

下面跟踪上面的出错产生流程。

在执行 make vmlinux 这样的内核目标时，在顶层 Makefile 里 $(dot-config) 变量( dog-c ...]]></description>
      <category>Makefile</category>
      <author>beyes</author>
      <pubDate>Tue, 28 Jun 2011 16:11:27 +0000</pubDate>
    </item>
  </channel>
</rss>