1. 认识Makefile

Make工具的使用格式:

make[options] [target]

选   

含   

-ffilename

显式地指定文件作为Makefile

-Cdirname

制定make在开始运行后的工作目录为dirname

-e

不允许在Makefile中替换环境变量的赋值

-k

执行命令出错时,放弃当前目标,继续维护其他目标

-n

按实际运行时的执行顺序模拟执行命令(包括用@开头的命令),没有实际执行效果,仅仅用于显示执行过程

-p

显示Makefile中所有的变量和内部规则

-r

忽略内部规则

-s

执行但不显示命令,常用来检查Makefile的正确性

-S

如果执行命令出错就退出

-t

修改每个目标文件的创建日期

-I

忽略运行make中执行命令的错误

-V

显示make的版本号

Makefile的常用变量:

变量

描述

$@

目标文件名

$<

规则中的第一个文件名

$^

规则中所有的依赖文件名

$?

规则中日期比目标新的文件列表,用空格隔开

$(@D)

目标文件的目录部分

$(@F)

目录文件的文件名部分

在Makefile中,目标名称的指定常常有以下惯例:

all:表示编译所有的内容,是执行make时默认的目标。

clean:表示清除目标。

distclean:表示清除所有的内容。

install:表示进行安装的内容。

  1. Makefile的使用范例

  1. 最简单的例子

    all:

    @echo"+++++++ make all +++++++"

    rule0:

    @echo"Input = $(INPUT)"

    @echo 'This Target is $@'

    .PHONY: clean

    clean:

    @echo"------- clean ------"

  2. Makefile中的依赖关系

all:rule0file.o

rule0:rule1

@echo"+++++++ rule0 +++++++"

@echo 'The deps:$^'

@echo 'The target:$@'

rule1:rule2

@echo"+++++++ rule1 +++++++"

rule2:rule3

@echo"+++++++ rule2 +++++++"

rule3:

@echo"+++++++ rule3 +++++++"

file.o:

@echo"1234567890" > file.o

@echo"File path: $(@D) File name : $(@F)"

.PHONY: clean rule0 rule1 rule2 rule3

clean:

@echo"------- clean ------"

rm -f file.o

Makefile的执行顺序不是按照每条规则书写的先后顺序,而是由规则之间的依赖关系确定的。在Makefile中,将目标cleanrule0 rule1 rule2rule3定义为伪目标(.PHONY),这是由于它们不是需要生成的内容的名称;file.o是实际生成的结果,因此它是真实的目标,而不是伪目标。

  1. Makefile的隐含规则

CC := gcc

HEAD := getarg.h

SRC := getarg.c writeinfo.o main.c

OBJS := getarg.o writeinfo.o main.o

TT := test

Files:= $(wildcard ./*)

INC= .

CFLAGS = -pipe -g -Wall -I$(INC)

LDFLAGS= -Wall -g

all:$(TT)

$(TT):$(OBJS)

@echo"+++++++ Build Standalone Programe : $@ +++++++"

$(CC)$(LDFLAGS) $(OBJS) -o $@

libtest_d.so:getarg.owriteinfo.o

@echo"+++++++ Build Dynamic lib : $@ +++++++"

$(CC)-shared $(LDFLAGS) getarg.o writeinfo.o -o $@

test_dlib:libtest_d.somain.o

@echo"+++++++ Build Exe by Dynamic lib : $@ +++++++"

$(CC)$(LDFLAGS) main.o -L. -ltest_d -o $@

filelist:

@echo"<<<<<<< Files in this folder >>>>>>"

@file$(Files)

.PHONY: clean filelist

%.o:%c

$(CC)$(CFLAGS) -c $< -o $@

clean:

@echo"------- clean ------"

rm-f *.o

rm-f $(TT)

rm-f libtest_d.so

rm -f test_dlib

转载于:https://my.oschina.net/fuyajun1983cn/blog/263840

专题 19 Makefile的使用相关推荐

  1. 远控免杀专题(19)-nps_payload免杀

    免杀能力一览表 几点说明: 1.上表中标识 √ 说明相应杀毒软件未检测出病毒,也就是代表了Bypass. 2.为了更好的对比效果,大部分测试payload均使用msf的windows/meterper ...

  2. 手机APP爬虫[爬虫专题(19)]

                                                                                          <目录> 原理 ...

  3. [4G5G专题-19]:架构-核心网的演变以及基于服务的5G核心网网络架构

    目录 1. 2G GSM核心网架构 2  3G UMTS核心网架构 3 4G LTE核心网架构 4 5G NR 核心网架构 1. 2G GSM核心网架构 2G组网非常简单,只提供语音业务和短消息业务. ...

  4. [YOLO专题-19]:YOLO V5 - ultralytics代码解析-dataloader数据加载机制

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  5. 远控免杀专题(20)-GreatSCT免杀

    转载:https://mp.weixin.qq.com/s/s9DFRIgpvpE-_MneO0B_FQ 免杀能力一览表 几点说明: 1.上表中标识 √ 说明相应杀毒软件未检测出病毒,也就是代表了By ...

  6. linux解决make依赖关系,makefile 自动处理头文件的依赖关系

    现在我们的Makefile写成这样: all: main main: main.o stack.o maze.o gcc $^ -o $@ main.o: main.h stack.h maze.h ...

  7. FFmpeg音视频开发实战5 iOS/Android/windows/Linux -陈超-专题视频课程

    FFmpeg音视频开发实战5 iOS/Android/windows/Linux -159618人已学习 课程介绍          咨询QQ: 347181469. 本课程适合中,从事音视频,网络通 ...

  8. [kuangbin]各种各样的题单

    [kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...

  9. 单链表操作实现getelem_c语言实现--带头结点单链表操作

    可能是顺序表研究的细致了一点,单链表操作一下子就实现了.这里先实现带头结点的单链表操作. 大概有以下知识点. 1;结点:结点就是单链表中研究的数据元素,结点中存储数据的部分称为数据域,存储直接后继地址 ...

最新文章

  1. 小程序 座位管理系统(一)(纯前端)
  2. Python调用MongoDB使用心得
  3. 七种垃圾收集器和垃圾回收、分代收集、GCROOTS相关概念、GC如何判断一个对象可以被回收
  4. c++ 不允许使用不完整的类型_Python入门高级教程--Python?变量类型
  5. 关于远程终端不能登录问题解决!
  6. windows linux cpu 抢占式 时间片_嵌入式Linux中进程调度怎样来解析
  7. 如何用softmax和sigmoid来做多类分类和多标签分类
  8. 电脑常用音频剪辑软件_常用的音频编辑软件
  9. java se ee me 区别_JDK与Java SE/EE/ME的区别
  10. python config文件_Python如何配置config文件?
  11. PHP和js做分页功能,php+js实现分页
  12. Maven安装与Maven HelloWorld入门实例
  13. SSMS证书已被颁发者吊销解决办法
  14. 怎样用python定位别人在哪_python程序员教你用微信给对方定位!你说回家!却还在外面鬼混?...
  15. 诸葛:大数据带来哪四种思维
  16. 中国汽车无线通信模块行业市场供需与战略研究报告
  17. 坚忍型性格分析,坚忍型人格的职业发展
  18. Python 文本终端 GUI 框架,太酷了
  19. 2018年全国各省市区编号大全(1)
  20. 映美Jolimark TP108W 打印机驱动

热门文章

  1. MIME文件类型格式--汇总
  2. Python3.2 --- Print函数用法
  3. 听说,京沪津的人都爱直接“看牌”买买买
  4. 我来做百科(第九天)
  5. JavaCore/HeapDump文件及其分析方法
  6. API聚合网关技术选型参考-网友实战-使用协程
  7. python基础知识和运用
  8. SAP 开发陷阱一箩筐(01)——创建了函数组却无法激活
  9. python 报错 cannot import name ‘byte_string‘ from ‘Crypto.Util.py3compat‘ 解决方法
  10. linux openssl libcurl库 交叉编译