• 学习资料

本文主要参考资料:驾驭Makefile(李云).pdf

  • Complicated项目

需求:

(1)object文件放到objs目录下

(2)可执行文件放到exes目录下

(3)增加头文件依赖

  • 自动生成依赖关系

(1)先用编译器为每一个源文件的自动生成的依赖关系放到一个文件(***.dep)中

gcc的-M和-MM选项

gcc -M foo.c //-M选项会列出对系统头文件的依赖关系

gcc -MM foo.c //-MM选项不会列出对系统头文件的依赖关系

(2)写出 .c 文件和 .dep 文件的依赖关系,并让make自动更新或生成 .dep 文件

foo.dep: foo.c //foo.d依赖foo.c生成
gcc -MM foo.c

最终生成的依赖关系:foo.o: foo.c foo.h,存放在foo.d文件中

(3)对编译器生成的依赖关系文件,进行加工处理

sed 's,\($*\)\.o[ :]*,objs/\1.o $@ : ,g' < $@.$$$$ >; $@; \

这个语句实现将foo.o: foo.c foo.h,更改为objs/foo.o deps/foo.dep: foo.c foo.h

增加了存放目录,以及把deps/foo.dep加入让依赖关系文件也能动态更新。

(4)实现代码

$(DIR_DEPS)/%.dep: $(DIR_DEPS) %.c
@echo "Making $@ ..."
@set -e;
$(RM) $(RMFLAGS) $@.tmp;
$(CC) -E -MM $(filter %.c, $^) > $@.tmp; \
sed 's,\($*\)\.o[ :]*,objs/\1.o $@ : ,g' < $@.tmp >; $@; \
$(RM) $(RMFLAGS) $@.tmp;

(5)include相关依赖关系文件

注:有原文章,这里有死循环问题,具体参考:https://blog.csdn.net/mantis_1984/article/details/72598848

其余目录依赖也有相关问题,可用同样方法解决。

  • 条件语法

ifdef variable-name
ifndef variable-name

有没有定义过某个变量

ifeq (arg1, arg2)
ifeq 'arg1' 'arg2'
ifeq "arg1" "arg2"
ifeq 'arg1' "arg2"
ifeq "arg1" 'arg2'

是否相等或不等

最新文章

  1. &amp;#65279导致页面顶部空白一行解决方法 【】
  2. WinForm跨窗体传值
  3. PHP性能测试工具xhprof安装与使用
  4. BZOJ3209 花神的数论题
  5. mysql TIME_WAIT
  6. java中类的继承
  7. javascript中闭包的概念
  8. 设计模式 - interpreter
  9. 5.7.2.4 random() 方法
  10. 开展.net mvc3遇到怪事+解
  11. hdu 1001 二叉树搜索
  12. sendemail 发送成功Email was sent successfully!邮箱却收不到邮件
  13. 关于C#开发 windows服务进程
  14. 关于Eclipse的一些简单设置
  15. CSS - !important声明强制优先
  16. Numeric Type Attributes
  17. NumPy 从已有的数组创建数组
  18. Tomcat学习总结(1)——Tomcat入门教程
  19. day78
  20. dubbo启动报错failed to bind nettyserver on

热门文章

  1. ef AddDays报错
  2. 《从零开始学Swift》学习笔记(Day 63)——Cocoa Touch设计模式及应用之单例模式
  3. [LintCode] 二叉树的前序遍历
  4. 本地代码推送到github仓库
  5. Powershell Get File/Disk Size
  6. telnet --- no route to host solution &quot;iptables -F &quot; in the target machine
  7. 原生js实现ajax方法
  8. Numpy常用操作方法
  9. 维多利亚的秘密 golang入坑系列
  10. ubuntu16.04 tomcat7安装和编码修改(转发:https://blog.csdn.net/zl544434558/article/details/76735564)