GNU Make 标准库
GNU Make 标准库(GMSL)是一个使用原生 GNU Make 功能实现的函数集合,提供了列表和字符串操作、整数运算、关联数组、栈以及调试工具。GMSL 以 BSD 许可证发布。[项目页面] [发布版本]
使用 GMSL
需要两个文件:gmsl
和 __gmsl
。要在你的 Makefile 中包含 GMSL,可以这样做:
include gmsl
gmsl
会自动包含 __gmsl
。要检查你使用的 GMSL 版本是否正确,可以使用 gmsl_compatible
函数(见下文)。当前版本是 1.2.3。GMSL 包还包含一个测试套件,只需运行 make -f gmsl-tests
即可。
逻辑运算符
GMSL 提供了布尔值 $(true)
(非空字符串)和 $(false)
(空字符串)。以下运算符可以与这些变量一起使用:
- not
参数:一个布尔值
返回值:如果布尔值为$(false)
,则返回$(true)
,反之亦然。 - and
参数:两个布尔值
返回值:如果两个布尔值都为$(true)
,则返回$(true)
。 - or
参数:两个布尔值
返回值:如果任意一个布尔值为$(true)
,则返回$(true)
。 - xor
参数:两个布尔值
返回值:如果恰好一个布尔值为$(true)
,则返回$(true)
。 - nand
参数:两个布尔值
返回值:返回not and
的结果。 - nor
参数:两个布尔值
返回值:返回not or
的结果。 - xnor
参数:两个布尔值
返回值:返回not xor
的结果。
列表操作函数
列表是一个由空格分隔的字符串。以下是常用的列表操作函数:
- first
参数:1: 一个列表
返回值:返回列表的第一个元素。 - last
参数:1: 一个列表
返回值:返回列表的最后一个元素。 - rest
参数:1: 一个列表
返回值:返回去掉第一个元素的列表。 - chop
参数:1: 一个列表
返回值:返回去掉最后一个元素的列表。 - map
参数:1: 要对列表每个元素调用的函数名 2: 要遍历的列表
返回值:对每个元素调用函数后的列表。 - pairmap
参数:1: 要对每对元素调用的函数名 2: 第一个列表 3: 第二个列表
返回值:对每对元素调用函数后的列表。 - fold
参数:1: 要对列表每个元素调用的函数名(该函数接受两个参数) 2: 要遍历的列表 3: 列表结束时使用的“零”元素
返回值:对每个元素调用函数后的结果。 - leq
参数:1: 要比较的列表 2: 另一个列表
返回值:如果两个列表相同,则返回$(true)
。 - lne
参数:1: 要比较的列表 2: 另一个列表
返回值:如果两个列表不同,则返回$(true)
。 - reverse
参数:1: 要反转的列表
返回值:反转后的列表。 - uniq
参数:1: 要去重的列表
返回值:去重后的列表。 - length
参数:1: 一个列表
返回值:列表中的元素数量。
字符串操作函数
字符串是任意字符序列。以下是常用的字符串操作函数:
- seq
参数:1: 要比较的字符串 2: 另一个字符串
返回值:如果两个字符串相同,则返回$(true)
。 - sne
参数:1: 要比较的字符串 2: 另一个字符串
返回值:如果两个字符串不同,则返回$(true)
。 - strlen
参数:1: 一个字符串
返回值:返回字符串的长度。 - substr
参数:1: 一个字符串 2: 起始偏移量(从1开始) 3: 结束偏移量(包含)
返回值:返回子字符串。 - split
参数:1: 分隔字符 2: 要分割的字符串
返回值:将字符串按分隔字符分割成列表。 - merge
参数:1: 分隔字符 2: 要合并的列表
返回值:将列表合并为单个字符串,元素之间用分隔字符分隔。 - tr
参数:1: 要替换的字符列表 2: 替换后的字符列表 3: 要翻译的文本
返回值:返回翻译后的文本。 - uc
参数:1: 要转换为大写的文本
返回值:返回大写的文本。 - lc
参数:1: 要转换为小写的文本
返回值:返回小写的文本。
集合操作函数
集合由排序且去重的列表表示。以下是常用的集合操作函数:
- set_create
参数:1: 集合元素列表
返回值:返回新创建的集合。 - set_insert
参数:1: 要添加到集合的元素 2: 一个集合
返回值:返回添加元素后的集合。 - set_remove
参数:1: 要从集合中移除的元素 2: 一个集合
返回值:返回移除元素后的集合。 - set_is_member
参数:1: 一个元素 2: 一个集合
返回值:如果元素在集合中,则返回$(true)
。 - set_is_not_member
参数:1: 一个元素 2: 一个集合
返回值:如果元素不在集合中,则返回$(false)
。 - set_union
参数:1: 一个集合 2: 另一个集合
返回值:返回两个集合的并集。 - set_intersection
参数:1: 一个集合 2: 另一个集合
返回值:返回两个集合的交集。 - set_is_subset
参数:1: 一个集合 2: 另一个集合
返回值:如果第一个集合是第二个集合的子集,则返回$(true)
。 - set_equal
参数:1: 一个集合 2: 另一个集合
返回值:如果两个集合相同,则返回$(true)
。
整数运算函数
整数由等量的 x
表示。例如,数字 4 表示为 x x x x
。以下是常用的整数运算函数:
- int_decode
参数:1: 由x
表示的数字
返回值:返回由x
表示的整数。 - int_encode
参数:1: 一个整数
返回值:返回由x
表示的整数。 - int_plus
参数:1: 由x
表示的数字 2: 另一个由x
表示的数字
返回值:返回两个数字的和。 - plus
参数:1: 一个整数 2: 另一个整数
返回值:返回两个整数的和。 - int_subtract
参数:1: 由x
表示的数字 2: 另一个由x
表示的数字
返回值:返回两个数字的差,如果出现下溢则输出错误。 - subtract
参数:1: 一个整数 2: 另一个整数
返回值:返回两个整数的差,如果出现下溢则输出错误。 - int_multiply
参数:1: 由x
表示的数字 2: 另一个由x
表示的数字
返回值:返回两个数字的乘积。 - multiply
参数:1: 一个整数 2: 另一个整数
返回值:返回两个整数的乘积。 - int_divide
参数:1: 由x
表示的数字 2: 另一个由x
表示的数字
返回值:返回第一个数字除以第二个数字的整数结果。 - divide
参数:1: 一个整数 2: 另一个整数
返回值:返回第一个整数除以第二个整数的结果。 - int_modulo
参数:1: 由x
表示的数字 2: 另一个由x
表示的