当前位置:  技术问答>linux和unix

问一个Makefile的语法问题

    来源: 互联网  发布时间:2016-05-02

    本文导语:  # ========================================================================== # Installing modules # ========================================================================== PHONY := __modinst __modinst: include scripts/Kbuild.include # __modules := $(sort $(shell grep...

# ==========================================================================
# Installing modules
# ==========================================================================

PHONY := __modinst
__modinst:

include scripts/Kbuild.include

#

__modules := $(sort $(shell grep -h '.ko' /dev/null $(wildcard $(MODVERDIR)/*.mod)))
modules := $(patsubst %.o,%.ko,$(wildcard $(__modules:.ko=.o)))

PHONY += $(modules)
__modinst: $(modules)
@:

quiet_cmd_modules_install = INSTALL $@ to $(2)
      cmd_modules_install = mkdir -p $(2); cp $@ $(2)

# Modules built outside the kernel source tree go into extra by default
INSTALL_MOD_DIR ?= extra
ext-mod-dir = $(INSTALL_MOD_DIR)$(subst $(KBUILD_EXTMOD),,$(@D))

modinst_dir = $(if $(KBUILD_EXTMOD),$(ext-mod-dir),kernel/$(@D))

$(modules):
$(call cmd,modules_install,$(MODLIB)/$(modinst_dir))


# Declare the contents of the .PHONY variable as phony.  We keep that
# information in a variable se we can use it in if_changed and friends.

.PHONY: $(PHONY)


请问上述quiet_cmd_modules_install = INSTALL $@ to $(2)是什么意思, 特别是INSTALL $@ to $(2)这里的2是什么意思



|
我来说下,不一定十分准确,大概就这个意思!!
quiet_cmd_modules_install 这个定义其实用来构造在make modules_install时需要的打印信息的!

执行make modules_install时,最终会调用到如下这个规则:
$(modules): 
        $(call cmd,modules_install,$(MODLIB)/$(modinst_dir)) 

该规则调用call函数执行cmd代表的语句时,会打印的信息就是:INSTALL $@ to $(2),只是要把其中$@替换为具体的$(modules),而$2替换为执行call函数传入的第二个参数$(MODLIB)/$(modinst_dir)!

举个例子,如果$(modules)内容为:a.ko, b.ko ...,$(MODLIB)/$(modinst_dir)内为:/lib/modules/2.6.18-1.2798.fc6/extra/test/。那么quiet_cmd_modules_install 这个变量构造出来的用作打印的内容就为:
   INSTALL a.ko to /lib/modules/2.6.18-1.2798.fc6/extra/test/
   INSTALL b.ko to /lib/modules/2.6.18-1.2798.fc6/extra/test/
   ...
也就是说,你执行make modules_install的时侯就会看到很多类似上面的打印信息!它们都是由
quiet_cmd_modules_install = INSTALL $@ to $(2) 这句话构造出来的!当然这是选择quiet编译
模式的时侯才会用到quiet_cmd_modules_install!否则用作打印的语句便是变量cmd_modules_install 构造
出来的。很显然,用cmd_modules_install构造的打印信息没有 quiet_cmd_modules_install 构造的“简洁”,
这也正是“quiet”(安静)这一次的含义。

不管是quiet模式,不是quiet模式,而具体执行安装(install)的动作都是由cmd_modules_install变量构造的命令执行来完成的。

要完全弄明白这个这句话背后的东西,你可能需要知道:
1. make的call函数的使用方法;参考:http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/index.html

2. 用知道cmd 变量是如何定义的? 这个可以看内核scripts/kbuild.include文件。类似定义如下:
   cmd = @$(echo-cmd) $(cmd_$(1))

3. $(modules)的内容是如何产生的?
... ...

内核的Makefile相对来说是比较复杂的,不过结合GNU Makefile手册和网络还是不难搞明白的! 上面的东西不是一两句话
能完全将明白,总之,你看内核Makefile就把它当作是源代码一样来看,总有看明白的一天 :)


废话很多,目的是希望能说清楚:) 高手的话就不要听我罗嗦了! 感觉自己的语言表达能力真的是越来越退化了!

good luck!

    
 
 

您可能感兴趣的文章:

  • 最近在学习linux C 看到了makefile部分,觉得makefile的语法很难理解,Makefile 的语法是不是shell语法?
  • 请教点的Makefile文件语法?
  • 请教点简单的Makefile文件语法,高手请进
  • [求助大牛]在makefile文件中输入sed,语法有问题。。。
  • 求解makefile问题,makefile.conf的作用?
  • 请教根据Makefile.am自动生成Makefile的问题
  • Makefile使用遇到的问题!"Makefile:3:missing the separator.stop"在线等待.......
  • 数据库 iis7站长之家
  • 亟待解决的问题!Makefile问题
  • 关于makefile文件的问题
  • makefile include的问题
  • linux中makefile大小写问题
  • 关于多层Makefile编译的问题
  • 初写MAKEFILE遇到问题,麻烦大家帮忙。
  • 多个Makefile合并的问题
  • 急!求助,关于makefile的问题
  • 关于makefile 中NUL报错及遗漏“endif”的问题
  • 用mkmf生成makefile的问题
  • 一个 makefile 问题
  • 问一个Makefile的问题
  • 关于makefile的问题,回的请进
  • makefile 简单问题
  • makefile 1254-004问题
  • Makefile的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Makefile.in,Makefile.am,Makefile.bor应该怎么用?
  • makefile.am和makefile.in是什么文件,与makefile有什么联系吗?
  • 从网上载了个C++程序的源代码,包含38个.cpp和.h,还有makefile.in和makefile.am两个文件,但无configure和makefile.请问怎么编译?谢谢!
  • 有makefile.am,有 makefine.in 为什么就是没有Makefile?
  • makefile如何调用文件目录下的makefile
  • 怎麼樣使Makefile.in生成Makefile?
  • 【急!】一个程序里有好多文件夹里都有Makefile,如何找到最管用的makefile
  • 【makefile使用】请问怎样在shell中获取makefile的最终目标?
  • unix下面make makefile文件,提示“makefile is up-to-date",怎么办呀?
  • Makefile是如何输出执行的路径的,表示执行的是那个Makefile
  • 下的tar.gz源码里只有makefile.in和makefile.am
  • 一句 makefile 的解释 -- makefile 与 shel 结合
  • linux makefile error :Makefile:335: *** commands commence before first target。
  • [test@localhost ~]$ cat <makefile >catfile 跟cat > catfile <makefile是一样的吧?
  • 关于makfile,makefile.in, makefile.am. configure之间的关系
  • win32下编译Linux 下的项目(makefile.am和makefile.in)
  • make -f makefile 时提示 Make: Must be a separator on rules line 5. Stop. 为什么,makefile 如下
  • 请问如何写动态的Makefile,或是有什么好的Makefile写法?麻烦分享一下,谢谢
  • Makefile :scripts/Makefile.build:49: *** CFLAGS was changed in "/opt/zaptel-1.4.
  • makefile 问题,三个关于实例分析,一个关于makefile的思考。——————欢迎光临


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3