= $(patsubst %$(SUFFIX), %, $(CUR_SOURCE)) all:$(CUR_TARGETS) # %:%.c 是一个表示与目标相同 文件的模式变量 $(CUR_TARGETS...):%:%$(SUFFIX) $(CC) $< $(CFLAGS) -o $@ $(LD) # 指定伪目标 .PHONY:clean all clean: -rm -rf...$(TARGETS) 参考文献 arch 这个词到底是什么意思?...:https://www.v2ex.com/t/389388 玩转Makefile | 一次编译多个目标:https://blog.csdn.net/yychuyu/article/details/79950414...--------------------- Author: Frytea Title: Makefile实例:批量编译多个目标 Link: https://blog.frytea.com/archives
其实之前我一直很懒,我不想了解makefile规则,因为在linux下开发我一直使用Qt creator。...因此很多开发者都会选择在Windows下开发C/C++程序,然后部署在Linux下执行。当然我也不例外。所以最近花了几个晚上了解makefile的编写规则。...(技术支持:www.guimigame.com) # @FILENAME 执行脚本输出makefile文件名 # @BIN 生成可执行文件名 # @SUFFIX 源文件后缀 # @ROOTPATH...最终在for val in OBJ2SRC:遍历所有的数据;列出所有的源文件(.cpp)生成所对应的目标文件(.o),将编译规则写进makefile。 ? 这是我要编译的工程,当然截图只是其中一部分。...有人可能会说为什么不写一个测试例子。其实我想说,很多时候要弄懂一些技术,动手去做也许是最好的方法。如果你有什么问题,欢迎与我讨论!
$^ 所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。 $+ 这个变量很像"$^",也是所有依赖目标的集合。...其在隐含规则中并没有意义。 1. Makefile 简介 Makefile 是和 make 命令一起配合使用的....Makefile中有个特殊的变量 VPATH 就是完成这个功能的....非默认情况下, 可以在 make 命令中指定特定的 Makefile 和特定的 目标....像 clean, install 这些伪目标, 广为人知, 不用解释就大家知道是什么意思了.
管理依赖关系:Makefile 可以指定源文件和目标文件之间的依赖关系。这使 make 工具能够确定哪些文件需要重新编译,从而优化编译过程并节省时间。...链接目标文件:Makefile 可以指定要链接的目标文件、链接器和链接选项。这使芯片开发人员能够轻松地将多个目标文件链接到一个可执行文件或库。...通过在变量赋值时结合使用 (nullstring) 和空格,可以确保空格被当作有效字符包含在变量值内,而不被当作无意义的行首空格处理掉。...= 可以通过terminal执行make指令时指定变量的值,如果我们就是使用的=对变量赋值,还能通过terminal对这个变量重新赋值吗?...中的函数 Makefile中有许多自带的函数供我们直接调用: subst函数 bar := ${subst not,totally, "I am not superman"} all: @echo
3.1 配套视频内容大纲 3.1.1 Makefile 规则与示例 参考文档:gunmake.htm ① 为什么需要 Makefile 怎么高效地编译程序? 想达到什么样的效果?...在 Makefile 中怎么放置第 1 个目标: 执行 make 命令时如果不指定目标,那么它默认是去生成第 1 个目标。 所以“第 1 个目标”,位置很重要。...有时候不太方便把第 1 个目标完整地放在文件前面,这时可以在文件的前面直接放置目标,在后面再完善它的依赖与命令。...假想目标: 我们的 Makefile 中有这样的目标: clean: rm -f $(shell find -name "*.o") rm -f $(TARGET) 如果当前目录下恰好有名为“clean...(5)$(addsuffix suffix,names…) 参数names...是一系列的文件名,文件名之间用空格隔开;suffix 是一个后缀名。
因此,我们应该将Makefile放在我们将要执行的任务的根目录中,或者调用我们将要编写的脚本最有意义的地方。 在Makefile中,我们遵循特定的格式。...您可以指定要在目标下运行的任何命令。您可以根据需要添加任意数量的命令。 命令在目标声明后的行上指定。它们由一个制表符缩进。...在我们的例子中,如果在我们的目录中有“file.jpg”,我们可以调用make这样构建一个名为“file.png”的文件: make file.png Make将在.SUFFIXES声明中看到png文件...创建一些Targets 我们现在在Makefile中有很多,但我们还没有任何正常的目标。...虽然在某些情况下编写一个简单的脚本可能更容易,但Makefile是在流程之间建立结构化的层次关系的简单方法。学习如何利用这个工具可以帮助简化重复性任务。
前言 我们在 Windows 下开发,或者初学 Linux 的时候,可能几乎没有接触过 makefile ,甚至都不知道 makefile 是什么,这是因为在 Windows 下各种各样的集成开发工具,...二、makefile 是怎么工作的 1. makefile 的三要素及命名 首先,makefile 中有三要素:目标(要生成什么)、依赖(用什么去生成)、和命令(如何去生成),这三个要素组成一个规则。....INTERMEDIATE: 这个特殊目标的依赖文件在 make 执行时被作为中间文件对待。没有任何依赖文件的这个目标没有意义。 .SECONDARY: 这个特殊目标的依赖文件被作为中过程的文件对待。....SILENT: 出现在此目标 “.SILENT” 的依赖文件列表中的文件,make 在创建这些文件时,不打印出此文件所执行的命令。同样,给目标 “SILENT” 指定命令行是没有意义的。...(2)makefile 的出错控制函数 在 makefile 中有两个函数 error 和 warning 可以控制 make 运行过程中的出错处理。
2、变量定义: 语法:变量名 := 变量值 在makefile中,经常先定义一个变量,然后往该变量中追加新的值(通过+=符号),比如先定义一个C_SRCS变量(该值可以为空),然后将代码文件test1....c和test2.c添加到C_SRCS中,其代码如下所示: C_SRCS := C_SRCS += test1.c test2.c 在makefile中有一类特殊的变量,其名称为 自动变量,自动变量的值会依据规则中的...、sort、word、wordlist、words、firstword、lastword;文件名处理函数dir、notdir、suffix、basename、addsuffix、addprefix、join...在makefile文件规则有2种,一种是显式规则,另一种是隐式规则。...在makefile中,我们通常要编写3种隐式规则,第1种为代码链接规则,第2种为源代码编译规则,第3种为汇编代码编译规则。
Makefile.am Makefile.am 文件是什么, Makefile.am->Makefile.in->Makefile,autoMake 工具利用 Makefile.am 最终生成Makefile...Makefile.am 文件,在 需要编译的目录或者编译以来目录每个目录都需要添加对应的Makefile.am 文件。...,用于引用.o 等编译出来的目标文件 详细说明请看博文:Makefile.am 下述是笔者编写的Makefile 第一层目录的Makefile SUBDIRS=src 第二层目录的Makefile(src...其他 查看一下 configure 的一些信息,看看长什么样 ....还算属于项目标准规范。 ..
=$BZIP2_FOLDER/Makefile # 使用sed编译器修改Makefile,在编译选项中增加-fPIC参数 # 判断CFLAGS中是否已经有-fPIC选项,如果没有就添加,没有则不修改 if...in $bzip2_makefile" sed -i -r 's/(^\s*CFLAGS\s*=)(.*$)/\1-fPIC \2/' $bzip2_makefile exit_on_error...安装路径 install_folder=$(dirname $(readlink -f $0))/release/$(install_suffix bzip2) echo install_folder:....在CFLAGS定义中增加-fPIC选项,如下: CFLAGS=-fPIC -Wall -Winline -O2 -g $(BIGFILES) 否则编译boost时会报错,在下载bzip2源码的脚本中有相关的代码用于自动在...CFLAGS定义中增加-fPIC选项 上面两个脚本中有不少相同的函数,为方便维护,在实际工程中,我是把它合并放在一个库文件中的,本文为了让每个脚本都能独立运行,才特别将公用函数分别复制到每个脚本中。
这是一个“修养”(呵呵,还记得我的《编程修养》吗)。...在Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被这个目标所连带出来的,所以一定要让make知道你的最终目标是什么。...当然,“伪目标”的取名不能和文件名重名,不然其就失去了“伪目标”的意义了。...二、变量中的变量 在定义变量的值时,我们可以使用其它变量来构造变量的值,在Makefile中有两种方式来在用变量定义变量的值。...其在隐含规则中并没有意义。 4、模式的匹配 一般来说,一个目标的模式有一个有前缀或是后缀的"%",或是没有前后缀,直接就是一个"%"。
七、清空目标文件的规则 每个Makefile中都应该写一个清空目标文件(.o和执行文件)的规则,这不仅便于重编译,也很利于保持文件的清洁。这是一个“修养”(呵呵,还记得我的《编程修养》吗)。...在Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被这个目标所连带出来的,所以一定要让make知道你的最终目标是什么。...当然,“伪目标”的取名不能和文件名重名,不然其就失去了“伪目标”的意义了。...二、变量中的变量 在定义变量的值时,我们可以使用其它变量来构造变量的值,在Makefile中有两种方式来在用变量定义变量的值。...其在隐含规则中并没有意义。 4、模式的匹配 一般来说,一个目标的模式有一个有前缀或是后缀的”%”,或是没有前后缀,直接就是一个”%”。
---- Makefile概述 基本格式 基本上每一个 Makefile 主体就是由若干个以下规则模块组成 : 表明输出的目标,输出目标的依赖对象和生成目标需要执行的命令。...判断目标是否存在, 依赖的对象是否有更新 根据依赖关系一步一步追溯查找,建立依赖关系链,执行需要执行的命令,最终输出终极目标。 没有在依赖链上的目标是不会被直接执行到的,比如 clean。...但是对于一个文件包含什么头文件,对应修改 Makefile,这样是很难维护的。 C/C++ 编译器 -MM 功能可以自动找寻文件的包含 ,生成依赖关系。...name.xxxx (在Makefile中 $ 有特殊含义,如果要表示它的字面意思需要写两个 $,所以 Makefile 中的四个 $ 传给Shell变成两个 $,而两个 $ 在Shell中表示当前进程的...@ @echo 命令执行 如果 Make 执行时,带参数“-n”或“--just-print”,那么其只是显示命令,不会执行命令,这个功能有利于我们调试我们的 Makefile,看看我们书写的命令执行起来是什么样子的或是什么顺序的
,依赖中有任一个被更新,则目标必须更新 分析各个目标和依赖之间的关系 根据依赖关系自底向上执行命令 根据修改时间比目标新,确定更新 如果目标不依赖任何条件,则执行对应命令,以示更新 一个最简单的 makefile...mycode@vmware:~/Desktop/code/makefile$ tree . ├── add.c ├── main.c ├── makefile ├── mul.c └── sub.c 目录中有...makefile 自动变量 makefile 中有一些预定义的变量,你可以理解它像是 C 语言中的一些关键字,分别有不同的意义,我们列举几个常用的自动变量(其他还有很多),通过上面的 makefile...$@:在命令中使用,表示规则中的目标 $在命令中使用,表示规则中的第一个条件 $^:在命令中使用,表示规则中的所有条件,组成一个列表,以空格隔开,如果这个列表中有重复的项则消除重复项。...makefile 模式规则 再分析一下上面的 makefile 代码,对于每个要生成的 .o 文件,我们都要给他写一条规则,如果有很多怎么办?难道要一条一条的写吗?
在使用Automake之前,要先手动建立Makefile.am文件。 Makefile.am是一种比Makefile更高层次的规则。...只需指定要生成什么目标,它由什么源文件生成,要安装到什么目录等构成。...在使用make编译源代码之前,configure会根据自己所依赖的库而在目标机器上进行匹配。...=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on...中可用的路径变量 在Makefile.am中尽量使用相对路径,系统预定义了两个基本路径: 路径变量 含义 $(top_srcdir) 工程最顶层目录,用于引用源程序 $(top_builddir) 定义了生成目标文件最上层目录
复杂度很高啊,但是在实际开发中也是比较常用的。为什么呢? 真当天天都有成千上万个字符的主串让我们去匹配吗?一般都比较短,而且,统计意义上,算法执行效率不会真的到M*N的地步。...---- 编辑器中的全局替换方法:BM算法 用过吗?比方说要在我这篇博客里找出全部的“主串”这个词,有没有想过其底层的原理? 这是一个性能优于KMP的算法。...但是在子串中找到了那个坏字符,那就将两个字符的位置对上。 模式串中有对应的坏字符时,让模式串中 最靠右 的对应字符与坏字符相对。...有些个特殊情况吧,它会导致不但不会向后滑动模式串,还有可能会倒推、 比如说主串:kkkkkkkkkkkkkkkkkk,模式串是 akk ---- 好后缀规则 如果模式串中存在已经匹配成功的好后缀,则把目标串与好后缀对齐...如果无法找到匹配好的后缀,找一个匹配的最长的前缀,让目标串与最长的前缀对齐: 如果完全不存在和好后缀匹配的子串,则右移整个模式串 ---- 代码实现 难顶,我一定会回来的 // a,b 表示主串和模式串
七、清空目标文件的规则 每个Makefile中都应该写一个清空目标文件(.o和执行文件)的规则,这不仅便于重编译,也很利于保持文件的清洁。...这是一个“修养”(呵呵,还记得我的《编程修养》吗)。...Makefile 总述 ——————— 一、Makefile里有什么?...如: -include 其表示,无论include过程中出现什么错误,都不要报错继续执行。...在这里提这个事,只是为了告诉大家,也许有时候你的Makefile出现了怪事,那么你可以看看当前环境中有没有定义这个变量。
Makefile实际上是一个文件的依赖关系,也就是说, target这一个或多个的目标文件依赖于dependency中的文件,其生成规则定义在命令command中。...如果依赖文件(dependency)中有一个以上的文件比目标(target)文件要新的话,shell命令(command)所定义的命令就会被执行。这就是Makefile的规则。...$@ ——表示规则中的目标文件集。在模式规则中,如果有多个目标,那么," $@ " 就是匹配于目标中模式定义的集合。 $% ——仅当目标是函数库文件中,表示规则中的目标成员名。...$^ ——所有的依赖目标的集合,以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。 $+ ——这个变量很像"$^",也是所有依赖目标的集合。...GNU make 支持两种类型的隐含规则: (1)后缀规则(Suffix Rule)。后缀规则是定义隐含规则的老风格方法。
领取专属 10元无门槛券
手把手带您无忧上云