博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
驱动学习笔记(零)一篇简单makefile的学习
阅读量:5738 次
发布时间:2019-06-18

本文共 2107 字,大约阅读时间需要 7 分钟。

ldd3中开始有一个makefile文件,英文注释很详细,加上简要中文注释,如下

# To build modules outside of the kernel tree, we run "make"

# in the kernel source tree; the Makefile these then includes this
# Makefile once again.
# This conditional selects whether we are being included from the
# kernel Makefile or not.
ifeq ($(KERNELRELEASE),)         #如果未定义KERNELRELEASE则说明是在内核构造系统环境外

    # Assume the source tree is where the running kernel was built

    # You should set KERNELDIR in the environment if it's elsewhere
    KERNELDIR ?= /usr/src/linux-source-2.6.38/linux-source-2.6.38   #内核路径
    # The current directory is passed to sub-makes as argument
    PWD := $(shell pwd)

modules:

 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

modules_install:

 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

clean:

 rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

.PHONY: modules modules_install clean

else

    # called from kernel build system: just declare what our modules are
    obj-m := hello.o hellop.o seq.o jit.o jiq.o sleepy.o complete.o \
             silly.o faulty.o kdatasize.o kdataalign.o

  #有一些模块需要从目标文件hello.o hellop.o seq.o jit.o jiq.o sleepy.o complete.o \

             silly.o faulty.o kdatasize.o kdataalign.o 中构造
endif

其中的PHONY,含义如下

PHONY 目标

  PHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字。有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能。
  如果编写一个规则,并不产生目标文件,则其命令在每次make 该目标时都执行。
  例如:
  clean:
  rm *.o temp
  因为"rm"命令并不产生"clean"文件,则每次执行"make clean"的时候,该命令都会执行。如果目录中出现了"clean"文件,则规则失效了:没有依赖文件,文件"clean"始终是最新的,命令永远不会执行;为避免这个问题,可使用".PHONY"指明该目标。如:
  .PHONY : clean
  这样执行"make clean"会无视"clean"文件存在与否。

  已知phony 目标并非是由其它文件生成的实际文件,make 会跳过隐含规则搜索。这就是声明phony 目标会改善性能的原因,即使你并不担心实际文件存在与否。

  完整的例子如下:
  .PHONY : clean
  clean :
  rm *.o temp
  phony 目标不应是真正目标文件的依赖。如果这样,每次make 在更新此文件时,命令都会执行。只要phony 目标不是真正目标的依赖,规则的命令只有在指定此目标时才执行。

  phony 目标可以有依赖关系。当一个目录中有多个程序,将其放在一个makefile 中会更方便。因为缺省目标是makefile 中的第一个目标,通常将这个phony 目标叫做"all",其依赖文件为各个程序:

  all : prog1 prog2 prog3
  .PHONY : all
  prog1 : prog1.o utils.o
           cc -o prog1 prog1.o utils.o
  prog2 : prog2.o
           cc -o prog2 prog2.o
  prog3 : prog3.o sort.o utils.o
           cc -o prog3 prog3.o sort.o utils.o

 

转载于:https://www.cnblogs.com/fly-fish/archive/2011/08/09/2132812.html

你可能感兴趣的文章
程序是如何执行的(一)a=a+1
查看>>
go : 结构
查看>>
【Python第五篇】Python面向对象(初级篇)
查看>>
innobackupex参数之 --throttle 限速这个值设置多少合理 原创
查看>>
18 已知下面的字符串是通过RANDOM随机数变量md5sum|cut-c 1-8截取后的结果
查看>>
BZOJ - 3578: GTY的人类基因组计划2
查看>>
理解WebKit和Chromium(电子书)
查看>>
爱——无题
查看>>
分布式服务框架原来与实践 读书笔记一
查看>>
Aho-Corasick automation-KMP
查看>>
【http】post和get请求的区别
查看>>
/etc/profile
查看>>
TFS强制撤销某个工作区的文件签出记录
查看>>
2.1 sikuli 中编程运行
查看>>
python魔法函数(二)之__getitem__、__len__、__iter__
查看>>
EL表达式无法显示Model中的数据
查看>>
ps6-工具的基础使用
查看>>
灵活运用 SQL SERVER FOR XML PATH
查看>>
es 加磁盘扩容
查看>>
使用Azcopy在Azure上进行HBase的冷热备份还原
查看>>