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

Makefile初期学习笔记

注:本笔记并不专业,可参考这一博主,由浅入深讲解的很好1.Makefile文件命名a.Makefile文件没有后缀名,命名有

注:本笔记并不专业,可参考这一博主,由浅入深讲解的很好




1. Makefile 文件命名

a. Makefile文件没有后缀名,命名有几种可选,如makefileMakefile,推荐用是Makefile




2. Makefile文件变量赋值

a. 变量的使用可以提高makefile的可维护性。⼀个变量的定义很简单,就是⼀个名字(变量名)后⾯跟上⼀个等号,然后在等号的后⾯放这个变量所期望的值。对于变量的引⽤,则需要采⽤$(变量名)或者${变量名}这种模式。类似C语言中的#define pi 3.14,利用变量来一般化文件名,需要修改时,只需要修改这些变量的定义即可。

CC=gcc
RM=rm
OBJS=main.o a.o
EXE=main
$(EXE):$(OBJS)$(CC) -o $@ $^
%.o:%.c:$(CC) -c -o $@ $^
clean:$(RM) $(EXE) $(OBJS)


b. 对于变量的赋值有四种,分别为
(1)即时赋值 a:=1:赋值后,该变量值即刻等于右值
(2)延时赋值 a=1:赋值后,该变量的值可以随着后续c值的变化而变化
(3)条件赋值 a?=1:如果a已经被定义,则该赋值操作不执行;否则a值等于右值
(4)追加赋值 a+=1:在a值后,以空格隔开追加一个值



c.自动变量
(1)$@:表示目标。存在多个目标时,表示任何造成命令执行的目标
(2)$^:表示所有依赖
&#xff08;3&#xff09;$<&#xff1a;仅表示第一个依赖


3. 利用上述变量可以简化makefile编写&#xff0c;无需每个.o文件都写一遍


4. 假目标&#xff1a;个人理解为防止出现和目标名字相同的文件&#xff0c;所以对真目标的一种保护&#xff0c;这样其他文件均为假目标

CC&#61;gcc
RM&#61;rm
OBJS&#61;main.o a.o
EXE&#61;main
$(EXE):$(OBJS)$(CC) -o $&#64; $^
%.o:%.c:$(CC) -c -o $&#64; $^
clean:$(RM) $(EXE) $(OBJS)
.PHONY clean



5. 函数

a. wildcard函数:通配符函数&#xff0c;形式为$(wildcard patten)
b. patsubst函数 用来进行字符换替换&#xff0c;形式为$(patsubst patten, replacement, text)

c. 应用&#xff1a;对于新增或删减一个.c文件&#xff0c;无需重新修改Makefile&#xff0c;示例如下

CC&#61;gcc
RM&#61;rm
SRCS&#61;$(wildcard *.c)
OBJS&#61;$(patsubst %.c, %.o, $(SRCS))
EXE&#61;main
$(EXE):$(OBJS)$(CC) -o $&#64; $^
%.o:%.c:$(CC) -c -o $&#64; $^
clean:$(RM) $(EXE) $(OBJS)

推荐阅读
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • C语言的经典程序有哪些
    本篇内容介绍了“C语言的经典程序有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文讨论了为什么在main.js中写import不会全局生效的问题,并提供了解决方案。在每一个vue文件中都需要写import语句才能使其生效,而在main.js中写import语句则不会全局生效。本文还介绍了使用Swal和sweetalert2库的示例。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 1.Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个HttpSession时 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
author-avatar
JRamboKing
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有