首页 > 系统相关 >Linux Makefile文件名处理函数知识详解

Linux Makefile文件名处理函数知识详解

时间:2024-09-10 08:57:00浏览次数:10  
标签:banana 文件名 Makefile LIST echo Linux home 处理函数 函数

GNU make提供了一系列对文件名进行各种操作的函数:文件名替换、加前缀、去目录等。

1.1dir函数:取路径名的目录

dir函数用来从一个路径名中截取目录的部分。

$(dir NAMES…)

dir函数会从NAMES文件名序列中,取出各个文件路径名中的目录部分并返回

.PHONY: allLIST = /home/wit/banana.c /usr/include/stdio.hall:    @echo "LIST = $(LIST)"    @echo "dir = $(dir $(LIST))"

执行make命令,运行结果为:

# makeLIST = /home/wit/banana.c /usr/include/stdio.hdir = /home/wit/ /usr/include/

1.2notdir函数:取文件名

notdir函数和dir函数实现完全相反的功能:从一个文件路径名中去文件名,而不是目录。notdir函数的使用方法和dir函数相同。

.PHONY: allLIST = /home/wit/banana.c /usr/include/stdio.hall:    @echo "LIST = $(LIST)"    @echo "file = $(notdir $(LIST))"

执行make命令,运行结果为:

# makeLIST = /home/wit/banana.c /usr/include/stdio.hfile = banana.c stdio.h

1.3suffix函数:取文件名后缀

suffix函数从一系列文件名序列中,取出各个文件名的后缀。

$(suffix NAMES…)

文件名的后缀是文件名中以点号 . 开始(包括点号)的部分。若文件名没有后缀, suffix函数则返回空。

.PHONY: allLIST = /home/wit/banana.c /usr/include/stdio.hall:    @echo "LIST = $(LIST)"    @echo "suffix = $(suffix $(LIST))"

执行make命令,运行结果为:

# makeLIST = /home/wit/banana.c /usr/include/stdio.hsuffix = .c .h

1.4basename函数:取文件名前缀

basename函数从一系列文件名序列中,取出各个文件名的前缀部分:

$(basename NAMES…)

如果一个文件名中包括多个点号,basename函数返回最后一个点号之前的文件名部分;如果一个文件名没有前缀,函数返回空字符串。

.PHONY: allLIST = /home/wit/banana.c /usr/include/vmlinux.lds.Sall:    @echo "LIST = $(LIST)"    @echo "basename = $(basename $(LIST))"

执行make命令,运行结果为:

# makeLIST = /home/wit/banana.c /usr/include/vmlinux.lds.S

1.5addsuffix函数:给文件名加后缀

addsuffix函数的作用是:给文件列表中的每个文件名添加后缀SUFFIX

 $(addsuffix SUFFIX, NAMES…)

使用示例:

.PHONY: allLIST = apple banana peachall:    @echo "LIST = $(LIST)"    @echo "addsuffix = $(addsuffix .c, $(LIST))"

运行结果:

# makeLIST = apple banana peachaddsuffix = apple.c banana.c peach.c

1.6addprefix函数:给文件名加前缀

addprefix函数的作用是:给文件列表中的每个文件名添加一个前缀PREFIX

$(addprefix PREFIX, NAMES…)

使用示例:

.PHONY: allLIST = apple.c banana.c peach.call:    @echo "LIST = $(LIST)"    @echo "addsuffix = $(addprefix /home/wit/, $(LIST))"

执行make命令,运行结果:

 makeLIST = apple.c banana.c peach.caddsuffix = /home/wit/apple.c /home/wit/banana.c /home/wit/peach.c

1.7join函数:单词连接

join函数的作用是:将字符串LIST1和字符串LIST2的各个单词依次连接,合并为新的单词构成的字符串

$(join LIST1,LIST2)

使用示例:

.PHONY: allLIST1 = apple banana peachLIST2 = .c .h .sLIST  = $(join $(LIST1), $(LIST2))all:    @echo "LIST1 = $(LIST1)"    @echo "LIST2 = $(LIST2)"    @echo "LIST = $(LIST)"

运行结果:

# makeLIST1 = apple banana peachLIST2 = .c .h .sLIST = apple.c banana.h peach.s

如果两个字符串中的单词个数不相等,则只合并前面的单词,剩下的单词不合并。如下面的Makefi:

.PHONY: allLIST1 = apple banana peachLIST2 = .c .hLIST  = $(join $(LIST1), $(LIST2))all:    @echo "LIST1 = $(LIST1)"    @echo "LIST2 = $(LIST2)"    @echo "LIST = $(LIST)"

运行结果:

# makeLIST1 = apple banana peachLIST2 = .c .hLIST = apple.c banana.h peach

因为LIST2中只有2个单词,所以我们可以看到最后一个单词peach没有参与合并,但仍作为一个新的单词合并到LIST变量中。

1.8wildcard函数:列出所有符号匹配模式的文件

wildcard函数的作用是:列出当前目录下所有符合PATTREN模式的文件名

$(wildcard PATTERN)

其中PATTREN可以使用shell能识别的通配符:?、*等。

使用示例:列出当前目录下的所有C文件

.PHONY: allLIST  = $(wildcard *.c)all:    @echo "LIST = $(LIST)"

执行make命令,运行结果为:

# lsadd.c  add.h  hello.c  main.c  makefile  sub.c  sub.h# makeLIST = hello.c main.c add.c sub.c

标签:banana,文件名,Makefile,LIST,echo,Linux,home,处理函数,函数
From: https://blog.csdn.net/qq_45398836/article/details/142068110

相关文章

  • FreeBSD兼容模式linux账户指向FreeBSD账户造成的困扰
    发现FreeBSD兼容模式linux账户指向FreeBSD账户,这导致账户出现了紊乱。比如FreeBSD下账户guest的id是1001,linux兼容模式下的guest账户id是1004#FreeBSD下目录归属drwxr-xr-x71skywalkskywalk1089月613:59skywalk#Linux下mud归属drwxr-xr-x71linuxskywalk......
  • Linux登录root出现-bash-4.2#
    登录root时出现-bash-4.2#原因之一可能是你将/root目录下的.bash_logout,.bash_profile,.bashrc文件删除了,或者是修改了没效果我们直接创建用户将用户的主目录下的这三个文件cp过来即可useradd-d/home/asiasi然后复制目录cp/home/asi/.bash_logout/rootcp/......
  • 【ZYNQ MPSoC Linux开发】为什么ZYNQ的EMIO不需要配置pinctrl子系统而只需要配置GPIO
        要细究这个问题,首先要知道pinctrl子系统和GPIO子系统究竟是干什么的,pinctrl子系统主要用于配置引脚的状态(如功能复用、电气属性等),而在Linux的软件架构中,GPIO子系统提供了对GPIO引脚的直接操作接口,如设置引脚方向、读取/写入引脚值等。    我们知道,在使用......
  • Linux:多路转接 select、poll、epoll
    1:select#include<sys/select.h>intselect(intnfds,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*timeout);   select函数是POSIX标准定义的一个系统调用,用于监视多个文件描述符(filedescriptors),以确定它们是否具有可读、可写或异常......
  • linux 安装软件
    转自:http://os.51cto.com/art/201003/186467.htm特别值得一提的是Linux操作系统有很多值得学习的地方,这里我们主要介绍Linux操作系统,包括介绍Linux操作系统等方面。Linux操作系统软件安装方法总结一、rpm包安装方式步骤:引用:1、找到相应的软件包,比如soft.version.rpm,下载到本......
  • Linux网盘,编程者的选择,让技术为数据服务,创造无限价值!“#Linux系统编程《网盘项目》
    "Linux网盘,编程者的选择,让技术为数据服务,创造无限价值!"#Linux系统编程《网盘项目》前言预备知识一、项目功能二、程序基本框架2.1服务器程序流图2.2客户端程序流图三、程序代码解析3.1服务器代码解析3.1.1主函数代码解析3.1.2信息处理函数代码解析3.1.3获取命......
  • Linux系统上安装Docker的详细教程
    感谢浪浪云支持发布浪浪云活动链接:https://langlangy.cn/?i8afa52文章目录1.在Ubuntu/Debian系统上安装Docker1.1更新软件包1.2安装依赖包1.3添加DockerGPG密钥1.4添加Docker仓库1.5安装Docker引擎1.6启动并验证Docker2.在CentOS/RHEL系统上安装Docker2.1......
  • 【实验楼】Linux系统管理-实验一:初识命令行
    Linux系统管理-实验一:初识命令行尝试简单命令请在命令行中显示当前所处的目录的名字。pwd请在命令行中显示当前主机名。hostname请在命令行中显示当前所使用的用户的名称。whoami尝试命令的选项请下达在15分钟内模拟关机的命令。shutdown-k15shutdown命令:https:/......
  • windows和Linux常用路径
    Linux/home普通用户在此目录下/etc 程序的配置文件/etc/resolv,conf  存放dns信息/etc/passwd文件内有用户的所有基本信息,密码是*储存在shadow里/etc/shadow存放密码/etc/group存放的组信息/tmp 存放临时文件/user/local/bin本地命令/car/spool/mail存......
  • Linux下io模型
    目录一. 阻塞式IO:最常见、效率低、不耗费cpuudp丢包​编辑tcp粘包tcp拆包二.非阻塞io:轮询、耗费CPU,可以处理多路IO概念设置非阻塞的方式1.通过函数自带参数设置2.通过设置文件描述符的属性,把对应属性设置为非阻塞三. 信号驱动IO/异步IO:异步通知方式,需要底层驱动......