热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Makefile工程管理语法与使用技巧

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




  

  使用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. $<&#xff1a;代表第一个依赖文件

使用前&#xff1a;
led.o : led.S
    arm-linux-gcc -g –o led.o -c led.S

使用后

led.o : led.S

    arm-linux-gcc -g -o  $&#64;  -c  $^


通用规则:

    当一个makefile中有许多类似的规则时&#xff0c;如
何将这些规则合并为一条通用规则&#xff1f;

    


例如:

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

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


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

hello: hello.c
    &#64;gcc hello.c –o hello
&#64;:
取消回显 &#xff08;演示&#xff09;

    

文件名:

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

         


          make -f 文件名



推荐阅读
  • 32位ubuntu编译android studio,32位Ubuntu编译Android 4.0.4问题
    问题一:在32位Ubuntu12.04上编译Android4.0.4源码时,出现了关于emulator的错误,关键是其Makefile里的 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • docker安装到基本使用
    记录docker概念,安装及入门日常使用Docker安装查看官方文档,在&quot;Debian上安装Docker&quot;,其他平台在&quot;这里查 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • uboot与linux驱动1.uboot本身是裸机程序(1)在裸机中本来是没有驱动概念的(狭义的驱动概念是指在操作系统中用来具体操控硬 ... [详细]
  • 用ESP32与Python实现物联网(IoT)火焰检测报警系统
    下图是本案例除硬件连线外的3步导学开发过程,每个步骤中实现的功能请参考图中的说明。在硬件连线完成之后我们建议您先使用“一分钟上云体验”功能预先体验本案例的实际运行效果 ... [详细]
  • Howtobuilda./configure&&make&&makeins ... [详细]
  • VS用c语言连接mysql,c语言连接mysql完整演示
    #include#includeintmain(){MYSQL*conn;创建一个指向mysql数据类型的指针connmysql_init(NULL);mysql的初始化if(!c ... [详细]
  • 源码安装Nginx 解决报错
    CentOS8源码安装Nginx编译安装注意事项如果安装时不是使用的默认路径,则必须要修改PATH环境变量,以能够识别此程序的二进制文件路径 ... [详细]
author-avatar
赵晓伟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有