shell命令
目录切换操作
cd <相对路径/绝对路径>
查看文件
ls [路径/./…/ ] [-l/a/h]
新建文件/修改时间戳
touch < filename >
新建目录
mkdir < dirname>
删除文件
rm < filename>
删除目录
rm < dirname> -rf
copy,mv,
link
#软链接
link -s <target> <linkname>
#硬链接
link <target> <linkname>
系统管理命令
uptime
编辑器vim
编辑模式
命令模式
查看文件命令
cat
head
tail
查找文件
#根据名字查找
find [path] -name <file>
#根据用户
-user <user>
#根据大小
-size <size>
shell脚本
关于shell脚本执行的不同方式的总结
1、source
在当前运行环境中运行,替换当前运行任务,如果执行exit,会直接退出当前终端。
2、sh
3、./
先创建一个新的环境,再运行脚本,如果执行exit,不会退出当前终端。
sh脚本
固定格式
#!/bin/sh
#command
...
或者
#!/bin/bash
#command
...
来选择不同的解释器;
1、变量
2、数组
3、算数运算
4、关系运算
5、条件运算
6、if-else
7、fo in/while
8、函数和函数调用
9、shell脚本调用和变量导出
gcc
预编译
#展开头文件,替换宏,去掉注释,处理条件宏
gcc -E hello.c -o a.c
编译
#源代码编译成汇编代码
gcc -S hello.c -o a.s
汇编
#汇编代码编译成二进制机器码
gcc -c hello.c -o a.o
链接
#多个目标文件或者库文件组合生成可执行文件
gcc hello.c -o a
Linaro下载
gcc下载地址linaro
Arm Developer gnu
makefile使用
在大工程里面makefile一般是使用工具生成的,不会自己写
makefile格式
target: obj1 obj2 ...
CC obj1 obj2 ... -o target
1、符号变量
@:目标文件:
*:表示目标文件的名称,不含扩展名;
+:所有依赖文件,按先后顺序空格分开,可以有重复;
^ :所有依赖文件,空格隔开,去除重复的文件;
< :第一个依赖文件 ;
? : 所有比目标文件时间戳晚的依赖文件;
:=:立即赋值变量定义
= :延时赋值变量定义,用到的时候才会赋值
+=:延时变量,追加,空格隔开
?=:延时变量,已经赋值的就不在赋值了
通配符
*:匹配0个或者多个字符
%:匹配0个或者多个字符
?:匹配任意一个字符
[]:我们可以指定匹配的字符放在 “[]” 中
2、预定义变量
AR ----------------> 生成静态库库文件的程序名称 (ar)
AS ----------------> 汇编编译器的名称 (as)
CC ----------------> C语言编译器的名称 (cc)
CPP --------------> C语言预编译器的名称 ($(CC) -E)
CXX --------------> C++语言编译器的名称 (g++)
FC -----------------> FORTRAN语言编译器的名称 (f77)
RM ----------------> 删除文件程序的名称 (rm -f)
ARFLAGS -------> 生成静态库库文件程序的选项 (无默认值)
ASFLAGS -------> 汇编语言编译器的编译选项 (无默认值)
CFLAGS ---------> C语言编译器的编译选项 (无默认值)
CPPFLAGS -----> C语言预编译器的编译选项 (无默认值)
CXXFLAGS -----> C++语言编译器的编译选项 (无默认值)
FFLAGS ----------> FORTRAN语言编译器的编译选项 (无默认值)
3、自动推导
4、高级函数
函数(按功能分类和字母排序) | 功能 | 参数和返回值说明 | 举例说明 |
---|---|---|---|
消息打印类型 | |||
error | 打印错误消息 | ||
info | 打印一般消息 | 参数:打印内容 | 打印一条消息 print info message$(info "print info message") |
warning | 打印警告消息 | ||
文件操作类型 | |||
wildcard | 展开文件 | 参数:匹配正则表达式,可以含通配符*和? 返回值:文件列表,可作为右值 files=$(widlcard des1 des2 ...) | 展开所有以.c为后缀的文件$(wildcard *.c) 后面的正则表达式,可以是列表,例如 $(wildcard include/*.h *.txt) |
patsubst | 按正则表达式名称替换 | 参数:匹配正则表达试 参数:替换正则表达试 参数:文件名列表 返回值:文件名列表,可为右值 files=$(patsubst *.c *.o filelist) | 文件列表的.c替换成.o$(patsubst *.c *.o filelist) |
notdir | 去除文件列表的的路径 | 参数:文件列表 针对文件列表的每个文件去除路径,只保留文件名称 返回值:只有文件名称的文件列表 | list是 xxx.txt vvvv/vvv.c bbb/bbb/bbb.h的列表 执行 $(notdir list) 的结果xxx.txt vvv.c bbb.h |
其他类型 | |||
sort | 对文件列表按名称排序 | 参数:文件列表 返回值:排序后的文件列表 |
打印
$(info "print info message")
$(warning "print warning message")
$(error "print error message")
# arg可以从外面传进来
# make arg="xxxx"
$(info "print arg $(arg)")
# 也可以直接使用echo打印
obj:
echo "build obj"
# 使用@可以不回显命令
obj:
@echo "build obj"
5、包含子makefile
export 导出变量给子makefile使用
6、Makefile传参
Makefile这样写:
CC = $(MYCC)
obj: file
$(CC) file -o obj
命令这样执行:
make MYCC="xxxx"