makefile是生成文件的脚本 , 把当前文件下的.c文件生成.o文件和可执行程序

SRC = $(wildcard *.c)
OBJS = $(patsubst %.c,%.o,$(SRC))
CC = gcc
FLAG = -g -static
LIB =
DEFS =
INCLUDE =
TARGET = helloworld
$(TARGET):$(OBJS)
$(CC) $(FLAG) $(DEFS) $^ -o $@ $(LIB)
.PHONY:
clean:
rm -rf *.o $(TARGET)

gcc -g hello.c -o hello -g后面是依赖文件 -o后面是要生成的目标文件
gcc -g -o hello hello.c 可以换一下位置效果同上  
  -c 编译而不链接
  -o 生成的文件 .c .i .s .o
  -g 生成带字符表的程序
  -D 快速控制代码是否执行 和#ifdefine 作用一样
  -I 可指定查找include文件的其他位置 如:$cc -c -I/usr/local/include -I/opt/include hello.c
  -L 指定链接库的搜索目录 , -l(小写L)指定链接库的名字
  -Wall 提升警告
  -g后面什么都不加就是动态链接库 -g后面加-static 静态

makefile里面的代码
  目标文件:依赖文件
  hello.o:hello.c
  gcc -g -o hello.o hello.c
#变量
  1.定义变量
    OBJ = 文件名 不可追加的变量
    OBJ := 可追加的变量
    OBJ += 追加
  2.使用变量
    ${} 或 $() 使用变量
  3.通配符
    % * ? % 任意一个 * 全部 ? 匹配 如 1?3 找到123 133 143
    $@ 代表目标文件
    $^ 代表依赖文件
    $< 代表第一个依赖文件
要生成target要依赖于 xxx.o xxxx.o 但是没有.o文件会跳到下一句生成.o再执行生成和target和递归(到来边界才会执行下一句)差不多
  

object := xxx.o xxxx.o
$(target):$(object)
$(CC) $(FLAG) $^ -o $@
%.o:%.c
$(CC) $(FLAG) $^ -o $@
.PHONY:
clean:
rm -rf *.o $(target)

利用编译器的隐式规则

object := xxx.o xxxx.o
$(target):$(object)
$(CC) $(FLAG) $^ -o $@
.PHONY:
clean:
rm -rf *.o $(target)

4.隐式规则 如果你要生成 .o文件就必须要先 .c -> .i -> .s 才能生成 .o 但是编译器会智能的帮你经过中间的过程
5.函数

//$(函数名 函数参数)如:
SRC = $(wildcard *.c) //wildcard 提取当前文件下面的某个文件
OBJS = $(patsubst %.c,%.o,$(SRC)) //patsubst 字符串替换函数 把SRC里的 .c 替换成.o
CC = gcc
FLAG = -g
DEFS =
LIB = -ltermcap //-lpthread // -L/word/abc.so
INCLUDE=
$(target):$(object)
$(CC) $(FLAG) $^ -o $@ $(LIB)
.PHONY:
clean:
rm -rf *.o $(target)

#多文件makefile的使用
  把顶层Makefile, Makefile.build放入程序的顶层目录 , 修改target , 修改obj-y
  再在每个子文件里新建一个makefile 把obj-y+=%.o

最新文章

  1. 自绘制HT For Web ComboBox下拉框组件
  2. MySQL 参数autoReconnect=true 解决8小时连接失效
  3. iOS 取得单张系统图片
  4. BZOJ2105: 增强型LCP
  5. AJAX 控件集之TextBoxWatermark(水印文本框)控件
  6. AngularJS的工作原理1
  7. genymotion中app不能安装问题
  8. Web学习的第四天
  9. JDBC连接ORACLE的三种URL格式
  10. 【java】package
  11. C#基础知识总结(一)
  12. mogodb排序
  13. sqlserver 中常见的函数字符串函数
  14. C# Activex调用USB摄像头--附带源码
  15. 要恢复页面吗?Chrome未正确关闭
  16. OAuth 授权
  17. C 多级指针
  18. json的省市联动
  19. JS interview loop code
  20. 自定义 Collection View 布局

热门文章

  1. [RN] React Native 实现 类似京东 的 沉浸式状态栏和搜索栏
  2. starUML
  3. HustOJ二次开发之隐藏菜单栏
  4. js逆向分析之acorn和escodegen的使用
  5. Schema注册表客户端
  6. mybatis自定义插件(拦截器)开发详解
  7. Python2.7 删除前N天日志文件
  8. (转)Ngx_Lua使用分享
  9. 泡泡一分钟:Context-Aware Modelling for Augmented Reality Display Behaviour
  10. 重温RabbitMQ