GNU Makefile手札
通配符
$@ 目标集合
$< 第一个依赖文件
$^ 所有依赖文件
$? 执行结果
% 表示任意长度的字符
$$$$ 随机数
@<command> 执行时不输出该命令到控制台
变量赋值
= 直接赋值
:= 未定义赋值
+= 追加赋值
?=
Makefile函数
在Makefile中可以使用函数来处理变量,函数的返回值可以当做变量来使用。
函数调用,很像变量的使用,也是以“$”来标识的,其语法为:$( )或${ }。
参数间以逗号分隔,函数名和参数间以空格分隔。函数调用以“$”开头,以圆括号或花括号把函数名和参数括起。
1) wildcard
objects := $(wildcard *.o)
等价于objects := a.o b.o xxx.o
2) subst
$(subst FROM, TO, TEXT),即将字符串TEXT中的子串FROM变为TO
3) patsubst
$(patsubst <pattern>, <replacement>, <text>)
查找text中的单词(以空格、Tab、回车、换行分隔)是否符合pattern模式,如果匹配,则以replacement替换。其中,pattern可以包括通配符%,表示任意长度的字符串。
4) filter
$(filter PATTERN…,TEXT)
函数功能:过滤掉字串“TEXT”中所有不符合模式“PATTERN”的单词,保留所有符合此模式的单词。可以使用多个模式。模式中一般需要包含模式字符“%”。存在多个模式时,模式表达式之间使用空格分割。
返回值:空格分割的“TEXT”字串中所有符合模式“PATTERN”的字串。
5) filter-out
$(filter-out <pattern>, <text>)
顾名思义,反过滤函数,返回text中不匹配pattern的字符串
6) firstword
$(firstword NAMES…)
函数名称:取首单词函数—firstword。
函数功能:取字串“NAMES…”中的第一个单词。
返回值:字串“NAMES…”的第一个单词。
函数说明:“NAMES”被认为是使用空格分割的多个单词(名字)的序列。函数忽略“NAMES…”中除第一个单词以外的所有的单词。
7) $(var:a=b)
把var中所有以a字符串结尾的a替换成b字符串,结尾指空格或者结束符。
8) strip
$(strip STRINT)
函数名称:去空格函数—strip。
函数功能:去掉字串(若干单词,使用若干空字符分割) “STRINT”开头和结尾的
空字符,并将其中多个连续空字符合并为一个空字符。
返回值:无前导和结尾空字符、使用单一空格分割的多单词字符串。
函数说明:空字符包括空格、[Tab]等不可显示字符。
9) findstring 查找字符串函数
$(findstring <find>, <in>)
在in中查找find字符串,如果找到,返回find,否则返回空字符串。
10) sort 按照升序排序函数
$(sort <list>)
11) word
$(word <n>, <text>)
取单词函数,取text字符串中第n个字符,从1开始计数。
示例$(word 2, foo bar baz)返回bar
12) wordlist
$(wordlist <s>, <e>, <text>)
取单词串,在text中取s到e的单词串
13) words
$(words <text>)
统计text字符串中的单词个数
调试技巧
$(info xxx)
$(warning xxx)
$(error xxx)
GNU Makefile手札的更多相关文章
- GNU Makefile中的条件控制结构
在常见的编程语言中,使用条件控制结构诸如if ... else if ... else...是很寻常的事情,那么在GNU Makefile中如何使用呢? ifeq ifneq 例如:foo.sh #! ...
- 6、GNU makefile工程管理学习的一个例子
在之前我们已经学习了一个文件的编译过程,但是做过项目的都知道,一个工程中的源文件不计其数,其按类型.功能.模块会分别放在若干个目录中,而这些文件如何编译就需要有一个编译规则,虽然现在很多大型的项目都是 ...
- GNU makefile 学习 - ongoing
资料: <跟我一起写makefile>---中文,baiduNetdisk http://www.gnu.org/software/make/manual/make.html
- GNU Makefile编写
[Introduction] make 是程序员很好用的工具,如果存在makefile存在,每次更新代码,执行shell命令 shell 就可以执行所有需要编译的文件,make是根据你编写的Makef ...
- 运算类实现 及 GNU Makefile基本结构
1.运算类的实现,代码如下: (1)operator.cpp #include<iostream> #include "operator.h" using names ...
- 利用 autoconf 和 automake 生成 Makefile 文件
一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...
- unix automake 使用,快速生成你的Makefile
使用automake快速生成编译的Makefile 1,确保自己装有的软件automake autoconf 2, 1)执行autoscan 并将生成的configure.scan重命名为config ...
- makefile使用
linux make手册:http://www.gnu.org/software/make/manual/make.html 一篇文章: 假设我们有一个程序由5个文件组成,源代码如下:/*main.c ...
- 一个通用的Makefile (转)
据http://bbs.chinaunix.net/thread-2300778-1-1.html的讨论,发现还是有很多人在问通用Makefile的问题,这里做一个总结.也作为以后的参考. ...
随机推荐
- Vue.nextTick浅析
Vue.nextTick浅析 Vue的特点之一就是响应式,但数据更新时,DOM并不会立即更新.当我们有一个业务场景,需要在DOM更新之后再执行一段代码时,可以借助nextTick实现.以下是来自官方文 ...
- ubuntu install xsltproc docbook-xsl docbook-xml
问题一: $ makexsltproc --output phtml/ param.xsl ./pxml/mainbook.xmlmake: xsltproc: Command not foundma ...
- 生成EXCEL文件是经常需要用到的功能,我们利用一些开源库可以很容易实现这个功能。
方法一:利用excellibrary,http://code.google.com/p/excellibrary/ excellibrary是国人写的开源组件,很容易使用,可惜貌似还不支持.xlsx( ...
- Linux系统性能测试工具(四)——CPU性能测试工具之super_pi、sysbench
本文介绍关于Linux系统(适用于centos/ubuntu等)的CPU性能测试工具-sysbench.CPU性能测试工具包括: super_pi: sysbench——不仅可以测试CPU性能,而且可 ...
- MacOS Mojave 安装sshpass
使用sshpass的场景 安装sshpass及各种常见小问题处理 测试 安全提示 使用sshpass的场景 在MacOS下使用ansible命令(inventory文件中使用了密码验证的方式)或者使用 ...
- Linux读写物理内存
一.基础知识 1.打开设备文件: mem是一个字符设备文件,是计算机主存的一个映像.通常只有root用户对其有读写权限.因此只有root用户能进行这些操作. 如果要打开设备文件/dev/mem,需要系 ...
- MAN RPM
RPM(8) Red Hat Linux RPM(8) NAME/名称 rpm - RPM Package Manager/RPM-RPM包管理器SYNOPSIS/简介 QUER ...
- day3 ord,chr,random,string
day3复习 >>> for i in range(10): ... if i == 3: ... break ... print(i) ... 0 1 2 >>> ...
- 模块的四种形式、 import和from...import、 循环导入问题、模块的搜索路径、 python文件的两种用途
目录 模块的四种形式 模块 模块的四种形式 import和from...import 循环导入问题 模拟问题的发生: 解决方案 模块的搜索路径 Python文件的两种用途 模块的四种形式 Nike推荐 ...
- 前端使用crypto-js进行加解密
import CryptoJS from 'crypto-js' export const crypto = { options() { return { key: CryptoJS.enc.Utf8 ...