shell,gcc,makefile

本文详细介绍了Linux shell的基本操作,如cd、ls、touch、mkdir等,还涵盖了系统管理、文件查找、软硬链接、编辑器vim的使用,以及makefile的高级功能。重点讲解了shell脚本的执行方式、变量、数组、函数等内容,并涉及gcc编译流程和Makefile的符号变量、预定义变量和使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>

csdn跟我练linux模块
跟我练Linux进阶

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"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值