使用GNU Make工具来管理程序是每个Linux工程师必须掌握的技能。Make能够使整个程序的编译、链接只需要一个命令(make)就可以完成。

Make的工作主要依赖于一个叫为Makefile的件。Makefile文件描述了整个程序的编译,连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译,如何最后产生我们想要得可执行文件。

Makefile中最重要的组成部分是“规则”
规则:用于说明如何生成目标文件,规则的格式如下:
targets : prerequisites
    command
目标 依赖 命令
特别提供:命令需要使用【TAB】键空格

目标?依赖?命令?

例如:
led.bin: led.o
    arm-linux-ld -Tled.lds -o led.elf led.o

Makefile中把那些只包含命令,没有任何依
赖的目标称为”伪目标”(phony targets)

.PHONY : clean\

clean:

rm -rf  hello main,o func.o

其中.PHONY  的作用是将clean生成为伪目标

最终目标:

1.当一个makefile中有多条规则时,如何单独执行某条
规则?make后面加某一个规则的目标
2. 如果用户没有指定执行某一条规则,make会默认
执行makefile中的第1条规则,而这条规则中的目标称之
为:最终目标

变量:

使用变量前:
app1: app1.o func1.o func2.o
    gcc app1.o func1.o func2.o -o app1
app2: app2.o func1.o func2.o
    gcc app2.o func1.o func2.o -o app2
使用变量后:
obj=func1.o func2.o
app1: app1.o $(obj)
    gcc app1.o $(obj) -o app1
app2: app2.o $(obj)
    gcc app2.o $(obj) -o app2

在makefile中,用户除了可以自己定义变量外,还可以使用
存在系统已经定义好的默认变量。
1. $^:代表所有的依赖文件
2, $@:代表目标
3. $<:代表第一个依赖文件

使用前:
led.o : led.S
    arm-linux-gcc -g –o led.o -c led.S

使用后

led.o : led.S

arm-linux-gcc -g -o  $@  -c  $^

通用规则:

当一个makefile中有许多类似的规则时,如
何将这些规则合并为一条通用规则?

例如:

led.o : led.S
    arm-linux-gcc -g –o led.o -c led.S

key.o : key.S
    arm-linux-gcc -g –o key.o -c key.S

uart.o : uart.S
    arm-linux-gcc -g –o uart.o -c uart.S

上面三个规则中目标和依赖只有后缀不一样,那么我们可以用%代替前缀

%.o : %.S

arm-linux-gcc -g –o %.o -c %.S

就代替了上面三个规则,简单实用.

为了节省时间,有时候我们需要去掉回显,在命令前加一个@符号,就可以去掉该命令的回显功能.例如:

hello: hello.c
    @gcc hello.c –o hello
@:取消回显 (演示)

文件名:

make命令默认在当前目录下寻找名字为makefile或者Makefile的工程文件,当名字不为这两者之一时,可以使用如下方法指定:

make -f 文件名

Makefile工程管理语法与使用技巧相关推荐

  1. Day 3 Linux(目录篇 、文件操作篇 、压缩解压相关命令, 编辑器vi 、编译器gcc 、调试器gdb、 makefile工程管理器初学)

    一.目录篇: 1.文件处理命令:cp 英文原意:copy 语法:cp -rp[源文件或目录][目的目录] 源文件可以同时是多个,即同时复制到多个文件 -r 复制目录 -p保留文件属性,比如文件创建时间 ...

  2. C++工程管理 版本控制git Makefile cmake LInux

    工程管理 git git 命令 创建仓库 远端仓库 生成秘钥 git 原理 git add git commit git 整理操作 git 冲突 git checkout git push git f ...

  3. FPGA的设计艺术(9)FPGA开发技巧与工程管理

    文章目录 前言 设计技巧和常见错误 PCB设计 数字设计 同步设计计数器示例:纹波计数器 减少编码时的不确定性. Verilog/VHDL编码 仿真 为什么仿真? 工程管理 管理工程师 前言 阅读一段 ...

  4. VS 的makefile工程

    自从IDE的出现简化了代码文件之间关联性管理后,就没多少愿意用makefile管理工程的了.makefile的语法规则也不复杂,加上后续的automake让编写的东西又简化了不少,但是相比IDE点一下 ...

  5. Qt的.pro工程文件语法学习

    我们编写Qt应用程序时,不管使用Qt Creator还是VS或者Eclipse,不管是Qt Widgets还是Qt Quick,总会发现有.pro文件,我们称.pro文件为Qt的工程管理文件,它存在的 ...

  6. 中科大MEM工程管理硕士专业考研初试与复试经验分享

    背景 2018年中科大(中国科学技术大学)MEM考研已通过复试,因为之前在网上查与科大相关的MEM备考信息特少,备考期间很盲目和焦虑.所以在此特写下经验贴,分享给后续报考科大的同学们. 招生情况 1. ...

  7. 05_I.MX6ULL工程管理与蜂鸣器实验

    目录 BSP工程管理 有源蜂鸣器简介 硬件原理分析 实验源码 bsp源码 main.c汇编文件源码 链接文件源码 Makefile源码 BSP工程管理 在实际工作中将所有源码放到工程的根目录下,如果工 ...

  8. Make工程管理器(读书笔记)

    到此为止,读者已经了解了如何在Linux下使用编辑器编写代码,如何使用Gcc把代码编译成可执行文件,还学习了如何使用Gdb来调试程序,那么,所有的工作看似已经完成了,为什么还需要Make这个工程管理器 ...

  9. 【Qt】Qt工程管理

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. QT Creator工程管理 04. Qt pro项目文件 05. pro文件的作用 06. Pro文件示例 07. 附录 ...

最新文章

  1. 记录一个免费而且好用的SSH登录软件_SecureCRT
  2. Ethernet/IP 学习笔记五
  3. JavaWeb_检查用户是否登录的过滤器
  4. 一个免费调用的OData服务,无需用户名密码,适用于SAP UI5的学习
  5. Sublime Text 3插件安装方法
  6. Spring高级应用之bean的生命周期
  7. MFC工作笔记0005---::在vc++中是什么意思
  8. 大数据分析如何助力制造行业
  9. ZooKeeper分布式过程协同技术详解2——了解ZooKeeper
  10. Codeforces Round #503 (by SIS, Div. 2)
  11. 基于 Flink+Iceberg 构建企业级实时数据湖
  12. linux子系统gdp调试,GDB调试命令_Linux编程_Linux公社-Linux系统门户网站
  13. System与Runtime类
  14. Aladdin and the Flying Carpet(LightOJ - 1341)(欧拉筛 + 质因数分解)
  15. 安卓9:Android studio模拟器屏幕翻转、旋转屏幕的解决办法
  16. 谢烟客---------Linux之 sed工具使用
  17. excel 筛选重复项_列表项的Excel筛选器:2011年“鲨鱼周”
  18. 学做网站论坛怎么样?分享新手学习建网站5天感受
  19. springBoot启动失败Caused by: java.lang.ClassNotFoundException: org.springframework.http.MediaType
  20. 空间转录组学(Spatial Transcriptomics)

热门文章

  1. java 在数组末尾添加元素_Java快问快答:用 ArrayList 还是 LinkedList?
  2. JS之字符串截取方法substring
  3. Webpack基础之入口起点
  4. 如果你还不了解GBDT,不妨看看这篇文章
  5. vba copy sheet
  6. 20175204 张湲祯 2018-2019-2《Java程序设计》 第一周学习总结
  7. Linux小知识(零散)
  8. Dockerfile语法
  9. 移动端去掉按钮点击热区
  10. BZOJ 2324: [ZJOI2011]营救皮卡丘(带上下限的最小费用最大流)