首页 > 系统相关 >Makefile 使用 shell 命令

Makefile 使用 shell 命令

时间:2024-01-18 14:00:49浏览次数:26  
标签:src shell 文件名 misc Makefile 命令 home cv

转发自 https://www.cnblogs.com/phillee/p/15020046.html
0. 前言
前面一节我们学习了 make 的基本使用规则以及变量定义赋值方法,可以写一些简单的实例。

Makefile学习笔记之变量定义与赋值

target ... : prerequisites ...
command
...
...
在使用 make 进行开发的过程中,我们常常会遇到一些需要在 Makefile 中与系统进行通信或者
对文件/文件夹名称进行获取并进一步处理的情况,本节就来学一下 make 语法中的相关操作。

  1. make 中调用shell命令
    在 Makefile 中调用shell 命令有两种形式。

1.1 第一种是为了获取命令在shell环境中的执行结果。

利用 $(shell commmand) 作为基本结构,不需要放在基本规则格式以制表符Tab开始的 command 位置处,我们提到的基本规则格式及文章开头展示的 target-prerequisted-command 的形式。如下示例

CUR_DIR := $(shell pwd)
CUR_TIME := $(shell date)
FILE_LIST := $(shell ls *.c)

all:
@echo $(CUR_DIR)
@echo $(CUR_TIME)
@echo $(FILE_LIST)
输出的结果如下

/home/cv/test
2021年 7月19日 星期一 19时58分25秒 CST
/home/cv/test/src/playground.c /home/cv/test/src/template.c
1.2 第二种是在单纯执行指定的命令以进行特定的操作。

用在基本规则格式的 command 处,例如打印信息、创建文件夹、删除中间文件等等。

all:
mkdir build

clean:
rm hello_test build/*.o
2. 对文件夹/文件名称进行操作
2.1 获取文件目录路径
DIR_PATH = $(dir /home/cv/misc_codes/project/src/main.c)
该指令的功能是从文件名序列中取出目录部分,返回值为目录部分,指的是最后一个反斜杠之前的部分。如果文件名中没有反斜杠将返回“./”。
上面的指令结果是返回 /home/cv/misc_codes/project/src。

2.2 获取不含目录的文件名
FILE_NAME = $(notdir /home/cv/misc_codes/project/src/main.c)
该指令的功能是从文件名序列中取出非目录的部分,即最后一个反斜杠之后的部分。返回值为文件非目录的部分。
上面的指令结果为 main.c。

2.3 获取文件后缀名
RESULT = $(suffix /home/cv/misc_codes/project/src/main.c)
该指令的功能是从文件名序列中取出各个文件的后缀名。返回值为文件名序列中的后缀序列,如果文件没有后缀名,则返回空字符串。
上面的指令结果为 .c。

2.4 获取不含后缀的文件名
RESULT = $(basename /home/cv/misc_codes/project/src/main.c)
该指令的功能是从文件名序列中取出各个文件名的前缀部分。返回值为被取出来的文件的前缀名,包含文件目录的路径,如果文件没有前缀名则返回空的字符串。
上面的指令结果为 /home/cv/misc_codes/project/src/main。

2.5 为文件添加前缀
RESULT = $(addprefix /home/cv/misc_codes/project/src/, main.c)
该指令的功能是把前缀加到文件名序列中的每个文件名的前面。返回值为添加上前缀的文件名序列。
上面的指令结果为 /home/cv/misc_codes/project/src/main。

添加后缀的函数与此基本相同,使用的是 addsuffix。

2.6 拼接函数
$(join ,)
该指令的功能是把 list2 的单词对应的拼接到 list1 的后面。
如果 list1 的单词要比 list2的多,那么,list1 中多出来的单词将保持原样,如果 list1 中的单词要比 list2 中的单词少,那么 list2 中多出来的单词将保持原样。

2.7 获取匹配模式文件名函数
$(wildcard )
函数的功能是列出当前目录下所有符合模式的 PATTERN 格式的文件名。返回值为空格分隔并且存在当前目录下的所有符合模式 PATTERN 的文件名。

标签:src,shell,文件名,misc,Makefile,命令,home,cv
From: https://www.cnblogs.com/fffdddsss/p/17972353

相关文章

  • adb常用命令
    ADB 常用命令ADB命令快速查看屏幕像素密度信息:adbshellwmdensityADB命令快速查看屏幕分辨率信息:adbshellwmsize  分辨率设置命令wmsize[reset|WxH|WdpxHdp]returnoroverridedisplaysize.widthandheightinpixelsunlesssuffixedwith'dp'.查看......
  • 命令行 下载器 支持协议 有那些
    Curl:Curl是一个功能强大且广受欢迎的命令行工具,支持多种网络协议,包括HTTP、HTTPS、FTP、SFTP、TFTP、SCP、LDAP、SMTP、POP3等。curl-o保存文件名下载链接Wget:Wget是另一个常用的命令行下载工具,支持多种协议,如HTTP、HTTPS、FTP、SFTP等。wget下载链接aria2:aria2是一个强......
  • (6)Powershell中命令自动补全功能及使用Windows命令
    (6)Powershell中命令自动补全功能及使用Windows命令上一节主要介绍了Powershell中常见的别名,以及怎么通过别名查看真实的Powershell命令,Powershell别名的命名规范以及如何新建自己的别名(Powershell内置别名不可更改)以及Powershell中兼容性别名,详细内容怼介里。在本节主要包含......
  • Dos命令
    Dos命令开启DOS控制台(CMD)的几种方式开始->系统->命令提示符Win+R->输入CMD打开控制台(推荐使用)在任意的文件夹下面,按住SHift键+鼠标点击,在此处打开命令行窗口资源管理器的地址栏前面加上CMD回车管理员方式运行:同上第一步找到命令提示符右键选择以管......
  • Shell - 集群监控脚本合集
      node_heart_check.sh#!/bin/bashscriptPath=$(dirname"$0")foripin`cat/etc/hosts|grep主机名关键字|awk'{print$2}'`;do#ping命令返回3次,自行中断ping-c3${ip}if[$?-ne0];thenecho${ip}"通信异常">>......
  • ansible使用sudo权限执行命令
    1.修改ansible配置文件vim/etc/ansible/ansible.cfg取消注释的行:remote_tmp=~/.ansible/tmpinventory=/etc/ansible/hostshost_key_checking=False2.编写host文件vim/etc/ansible/hosts10.0.3.2ansible_ssh_user="ydpower"ansible_ssh_port="5151"a......
  • (5)Powershell别名(Alias)
    (5)Powershell别名(Alias)在上一节,介绍了如何检索当前shell及Powershell中所有可用的命令,对于指定的命令会查看其语法信息,可以获取指定命令的帮助信息,包括获取在线帮助主题,详细内容时间戳这嘎达。在本节中,主要介绍Powershell的别名,主要包含以下内容。熟悉常见的别名。标......
  • (4)Powershell基础知识(二)
    (4)Powershell基础知识(二)上一节主要介绍Powershell可发现,面向对象,一致性等特性,以及Powershell命令是基于.Net对象等重要概念,以及Powershell命令的命名规范,详细内容点击这嘎达。这一节的Powershell基础知识主要包含以下知识点获取命令的摘要信息。获取命令的帮助信息。......
  • top的命令使用
    1、要使用top-n命令获取前5个进程的信息打开终端,并输入以下命令:bash复制代码top-n1-b|head-n12&&top-n1-b|tail-n+8|head-n5运行该命令后,top命令将显示当前系统中所有进程的资源使用情况,并通过管道将输出传递给head和tail命令。第一个to......
  • kvm管理命令
    查看运行的虚拟机[root@103kvm]#virshlistId名称状态----------------------------------------------------1dbrunning5testrunning查看所有的虚拟机[root@103k......