当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: Makefile 初探Makefile 初探
 

 

 ·安装imap服务器    »显示摘要«
    摘要:安装imap服务器   几乎所有的发行包都带有imap服务器软件(一般是华盛顿大学版本),最好的办法是用你的发行包安装imap服务器。事实上,我个人觉得imap服务 器很少被使用。下载最常规的imap服务器源码地址是:ftp://ftp.cac.washington.edu/imap/imap.tar.z   tar zxvf imap.tar.z   cd ima......
 ·内核升级    »显示摘要«
    摘要:内核升级如果你不愿意冒险,可以跳过这个部分。不过根据我实际使用的经验,2.4.x版本的内核性能比2.2.x 的性能至少提高40%,还是很值得一试的。现在最新的发行包几乎都带有新的2.4内核,但是版本号想对保守。这里,我的建议是在决定升级任何部分的时候, 一定要首先看一下所谓的“currect version release note”信息,里面告诉你本次版本升级都有些什么改动。如果改动的内容......


Makefile 初探

makefile 初探

【程序编程相关:Unix操作系统的发展及时间表

makefile 初探 【推荐阅读:关于Neighbour table ov

原文出自:http://www.linuxforum.net 【扩展信息:关于linux图形界面的基本知识[转]

作者:jkl

==========================================

makefile 初探

==========================================

linux的内核配置文件有两个,一个是隐含的.config文件,嵌入到主makefile中;另一个是 include/linux/autoconf.h,嵌入到各个c源文件中,它们由make config.make menuconfig.make xconfig这些过程创建.几乎所有的源文件都会通过linux/config.h而嵌入autoconf.h,如果按照通常方法建立文件依赖关系 (.depend),只要更新过autoconf.h,就会造成所有源代码的重新编绎.

为了优化make过程,减少不必要的重新编绎,linux开发了专用的mkdep工具,用它来取代gcc来生成.depend文件.mkdep在 处理源文件时,忽略linux/config.h这样的头文件,识别源文件宏指令中具有"config_"特征的行.例如,如果有"#ifdef config_smp"这样的行,它就会在.depend文件中输出$(wildcard /usr/src/linux/include/config/smp.h).

include/config/下的文件是另一个工具split-include从autoconf.h中生成,它利用autoconf.h中的 config_标记,生成与mkdep相对应的文件.例如,如果autoconf.h中有"#undef config_smp"这一行,它就生成include/config/smp.h文件,内容为"#undef config_smp".这些文件名只在.depend文件中出现,内核源文件是不会嵌入它们的.每配置一次内核,运行split-include一次. split-include会检查旧的子文件的内容,确定是不是要更新它们.这样,不管autoconf.h修改日期如何,只要其配置不变,make就不 会重新编绎内核.

如果系统的编绎选项发生了变化,linux也能进行增量编绎.为了做到这一点,make每编绎一个源文件时生成一个flags文件.例如编绎 sched.c时,会在相同的目录下生成隐含的.sched.o.flags文件.它是makefile的一个片断,当make进入某个子目录编绎时,会 搜索其中的flags文件,将它们嵌入到makefile中.这些flags代码测试当前的编绎选项与原来的是不是相同,如果相同,就将自已对应的目标文 件加入files_flags_up_to_date列表,然后,系统从编绎对象表中删除它们,得到files_flags_changed列表,最后, 将它们设为目标进行更新.

下一步准备逐步深入的剖析makefile代码.

==========================================

makefile解读之二: sub-make

==========================================

linux各级内核源代码的子目录下都有makefile,大多数makefile要嵌入主目录下的rule.make,rule.make将识 别各个makefile中所定义的一些变量.变量obj-y表示需要编绎到内核中的目标文件名集合,定义o_target表示将obj-y连接为一个 o_target名称的目标文件,定义l_target表示将obj-y合并为一个l_target名称的库文件.同样obj-m表示需要编绎成模块的目 标文件名集合.如果还需进行子目录make,则需要定义subdir-y与subdir-m.在makefile中,用"obj-$ (config_binfmt_elf) += binfmt_elf.o"与"subdir-$(config_ext2_fs) += ext2"这种形式自动为obj-y.obj-m.subdir-y.subdir-m添加文件名.有时,情况没有这么单纯,还需要使用条件语句个别对 待.makefile中还有其它一些变量,如mod-subdirs定义了subdir-m以外的所有模块子目录.

rules.make是如何使make进入子目录的呢? 先来看subdir-y是如何处理的,在rules.make中,先对subdir-y中的每一个文件名加上前缀"_subdir_"再进行排序生成 subdir-list集合,再以它作为目标集,对其中每一个目标产生一个子make,同时将目标名的前缀去掉得到子目录名,作为子make的起始目录参 数.subdir-m与subdir-y类似,但情况稍微复杂一些.由于subdir-y中可能有模块定义,因此利用mod-subdirs变量将 subdir-y中模块目录提取出来,再与subdir-m合成一个大的mod_sub_dirs集合.subdir-m的目标所用的前缀是 "_modsubdir_".

一点说明,子目录中的makefile与rules.make都没有嵌入.config文件,它是通过主makefile向下传递 makefiles变量完成的.
...   下一页
 ·使用xmanager访问linux图形界面    »显示摘要«
    摘要:使用xmanager访问linux图形界面1. 修改/etc/inittab,改变runlevel为5,例如 [root@qredhat etc]# cat /etc/inittab ...... id:5:initdefault: ...... 改为5级别方式运行linux2. 修改gdm的配置文件,/etc/x11/gdm/gdm.conf,将[xdmcp]中的enable选项设置为1,例如 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE