栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Makefile自动生成头文件依赖

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Makefile自动生成头文件依赖

【参考博客】:

Makefile自动生成头文件依赖_hitwlh的专栏-CSDN博客以makefile编译c工程为例进行解释。在网上搜到的相关教程如下:http://blog.sina.com.cn/s/blog_4b3c1f950102dxh4.htmlhttp://blog.csdn.net/liangkaiming/article/details/6267357http://luzhi1024.blog.51cto.com/8845546/16507https://blog.csdn.net/hitwlh/article/details/53028121【参考书籍】:

《跟我一起学Makefile》

1. 什么是Makefile自动生成头文件依赖

也就是说,如果在自己的Makefile中有需要写出头文件的依赖时,可以用上这个知识点,需要注意的是,在GNU的C/C++编译器下,需要使用gcc -MM xxx.c来自动生成头文件依赖关系

2. 原理与方法

前一点所说的自动生成头文件依赖的方法是基于C/C++编译器的功能,那么如何将它集成到Makefile中呢?

这里的原理是先把gcc -MM xxx.c生成的依赖关系重定向到一个文件中,利用Makefile的include功能,在Makefile的第一阶段把该文件的内容include到自己的Makefile中即可,这样不仅有了依赖关系,而且Makefile还会根据"隐晦规则",自动推导出生成.o的命令来

3. 验证
root@ubuntu:/lianxi/lianxi299# make
set -e;rm -rf hello.d;gcc -MM hello.c > hello.d.$$;cp hello.d.$$ hello.d;rm -rf hello.d.$$
gcc    -c -o hello.o hello.c
gcc hello.o -o hello
root@ubuntu:/lianxi/lianxi299# 
root@ubuntu:/lianxi/lianxi299# ls
hello.c  hello.h  Makefile
root@ubuntu:/lianxi/lianxi299# 
root@ubuntu:/lianxi/lianxi299# 
root@ubuntu:/lianxi/lianxi299# 
root@ubuntu:/lianxi/lianxi299# 
 1 .PHONY:all clean
  2 CC     :=gcc
  3 AT     :=@
  4 TARGET :=hello
  5 OBJS   :=hello.o
  6 INCLUDE:=-I./
  7 
  8 all:$(TARGET)
  9 
 10 $(TARGET):$(OBJS)
 11     $(CC) $^ -o $@
 12 
 13 #%o:%c
 14 #   $(CC) $(INCLUDE) -c $^ -o $@
 15 #hello.o: hello.c hello.h
 16 -include $(OBJS:.o=.d)
 17 
 18 %.d:%.c
 19     set -e;rm -rf $@;$(CC) -MM $^ > $@.$$$$;cp $@.$$$$ $@;rm -rf $@.$$$$
 20 
 21 clean:
 22     -rm *.o *.d $(TARGET)
4. 解释

Makefile的执行分成如下两个阶段:

第一阶段:

读入Makefile读入被include的其它Makefile初始化Makefile中的变量推导隐晦规则,并分析所有规则为所有目标创建依赖关系链

第二阶段:

根据依赖关系,决定哪些目标需要生成执行命令

所以在读入Makefile之后就会去执行16行-include hello.d,此时没有该文件,Makefile会尝试生成该文件并继续include它,所以Makefile找到了18行的规则,生成了hello.d并include到当前Makefile中,效果如15行

在接下来的推导隐晦规则中,Makefile会自动推导出生成hello.o的命令来,在第三点中执行的过程已经贴出

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/733939.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号