Chinaunix

标题: 模块编译的makefile [打印本页]

作者: stuman    时间: 2014-07-06 18:52
标题: 模块编译的makefile
  1. ifneq ($(KERNELRELEASE),)
  2. # call from kernel build system

  3. scull-objs := main.o pipe.o access.o

  4. obj-m        := scull.o

  5. else

  6. KERNELDIR ?= /lib/modules/$(shell uname -r)/build
  7. PWD       := $(shell pwd)

  8. modules:
  9.         $(MAKE) -C $(KERNELDIR) M=$(PWD) LDDINC=$(PWD)/../include modules

  10. endif



  11. clean:
  12.         rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

  13. depend .depend dep:
  14.         $(CC) $(CFLAGS) -M *.c > .depend


  15. ifeq (.depend,$(wildcard .depend))
  16. include .depend
  17. endif
复制代码
当执行make命令时,会执行makefile的第一个规则,如果第一个规则依赖于下面的规则,那么会执行其余的规则。但是这里depend .depend dep代表的规则没有放入前面的规则的依赖中,那么这个规则何时执行呢?还有按道理应该生成一个.depend文件,为什么我找不到这个文件呢?
作者: stuman    时间: 2014-07-11 19:06
没人回答吗?自己顶一下
作者: 黎明748    时间: 2014-07-12 08:18
你不放依赖项怎么执行。一定要执行的话就make depend
作者: 黎明748    时间: 2014-07-12 08:52
本帖最后由 黎明748 于 2014-07-12 08:53 编辑

depend .depend dep:
        $(CC) $(CFLAGS) -M *.c > .depend

//这个是多目标规则,在这里无意义,详细看GNU makefile
ifeq (.depend,$(wildcard .depend))
include .depend
endif

//当前工作目录下有.depend时,包含.depend
要生成.depend文件执行make depend
作者: stuman    时间: 2014-07-12 14:53
这里需要编译一个模块,模块的主文件里用include包含了自己的头文件。如果这个依赖不执行,那么岂不是无法侦测到头文件的改变了?
作者: chishanmingshen    时间: 2014-07-16 14:50
回复 5# stuman


    你试试不就知道了,改改头文件试试。
作者: stuman    时间: 2014-07-16 21:05
关键是make depend的时候出错,而且好像不是列出依赖,而是去编译模块了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2