【Linux】linux随记

gcc编译过程

hello.c->hello.i->hello.s->hello.o
1.预处理 :宏替换,展开头文件,替换条件编译,删除注释
gcc -E hello.c -o hello.i
2.编译:检查语法规范
gcc -S hello.i -o hello.s
3.汇编:编译成机器指令
gcc -c hello.s -o hello.o
4.连接

gcc hello.c -o hello

交叉编译

arm-linux-gnueabihf-gcc hello.c -o arm-hello

/bin /usr/bin /usr/local/bin 的区别

  • /bin 是所有用户都可以访问并执行的可执行程序。包括超级用户及一般用户。
  • /usr/bin 是系统安装时自带的一些可执行程序。即系统程序,轻易不要去动里面的东西,容易入坑。
  • /usr/local/bin 是用户自行编译安装时默认的可执行程序的安装位置,这个不小心误删点什么,不会影响大局。
    ————————————————
    版权声明:本文为CSDN博主「鱼月半」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/baidu_31788709/article/details/90679657

shell命令

man //查看帮助文档
e.g.
man man
man 3 printf
man cd

cd --help //另一种查看帮助文档的方法
cd

pwd

mkdir rmdir touch rm rm -rf directory //递归删除目录
mkdir -p a/b/c //创建多层目录
mv filename filename //文件重命名

cp filename filename //复制文件
cp filename directory //复制文件到指定目录
cp -a directory directory // 复制目录
cp -r directory directory //复制目录

chmod 777 filename //修改文件权限
cat more head tail e.g. head 4 filename tail 4 filename

gedit vim

find ./ -maxdepth 4 -name “*.a”

grep “字符串” filename -n 加上-n显示所在的行 //在文件中查找字符串

sudo su

df -h //查看文件系统所占用空间
du -h //查看所使用的磁盘空间大小,会输出各个文件的使用空间
du -sh // 查看所使用的磁盘空间大小,不输出各个文件的使用空间

history

ifconfig ping //网络相关命令

clear

poweroff//关机
reboot//重启

快捷方式

!! //再次执行上一个命令
sudo !!//以sudo权限执行上一个命令

shell脚本

type cd //查看cd是否是shell的内部命令

echo $PATH//查看环境变量
//将hello.c编译成hello可执行文件后 放入 /usr/bin 目录中,就可在任何地方隐性hello。
//即将hello变成shell命令

showmount -e //查看共享文件夹

sudo apt update
sudo apt install …

errno -l //打印出所有错误码

makefile命令

  1. make //运行makefile
  2. make clean //运行伪命令
  3. make -f makefile_my //运行不是以makefile或Makefile命名的makefile文件
  4. makefile 的书写规范

目标:依赖
Tab键 命令
PHONE:clean// 伪命令
clean: //不需要依赖可不写
rm *.o

e.g.

mp3:*.o
	gcc *.c -o mp3
*.o:*.c
	gcc -c *.c 
.PHONE:clean
clean:
	rm  *.o mp3

makefile的变量

系统变量:

.PHONY:all
all:
    echo "$(CC)" //cc
    echo "$(AS)" // as
    echo "$(MAKE)"//make

自定义变量: //note:变量都是字符串来着

  1. =:延时赋值
A=123
B=$(A)
A=456

.PHONY:all
all:
	echo "$(B)" //输出456,变量 B 在被引用的时候才被赋值
  1. := ,立即赋值
A=123
B:=$(A)
A=456

.PHONY:all
all:
	echo "$(B)" //输出123,变量 B 立即被赋值
  1. ?=, 空赋值,只有在变量为空时,才能被赋值,即只能初次赋值
A?=123
A?=234
.PHONY:all
all:
	echo "$(A)"//输出123.
4. +=,追加赋值
A ?= 23
A +=56
.PHONY:all
all:
	echo "$(A)"//输出 23 56  //多了个空格

自动化变量:

1.$< :第一个依赖文件

.PHONY:all
all:targeta targetb
	echo "$<"
targeta:
targetb: //输出 targeta

2.$^ :全部依赖文件

.PHONY:all
all:targeta targetb
	echo "$^"
targeta:
targetb: //输出 targeta targetb

3.$@:目标

.PHONY:all
all:targeta targetb
	echo "$@"
targeta:
targetb: //输出 all,伪目标也是目标

变量总结

= 延时赋值
:= 立即赋值
?= 空赋值
+= 追加赋值
$< 第一个依赖文件
$^ q全部依赖文件
$@ 目标

使用

CC = gcc
TARGET = SmartHome
OBJ = *.o
$(TARGET):$(OBJ)
	$(CC) $^ -o $@
$(OBJ):*.c 
	$(CC) -c *.c 
.PHONY:cleans
cleans:
	rm $(OBJ) $(TARGET)

模式匹配

1.%:匹配任意多个非空字符 //相当于 shell中的 通配符 *

%:

	echo "$@"

终端输入命令

note:df作为运行的目标传给 %

使用

CC = gcc

TARGET = mp3

OBJ = main.o play.o

$(TARGET):$(OBJ)

	$(CC) $^ -o $@

%.o:%.c 

	$(CC) -c $^ -o $@

.PHONY:cleans

cleans:

	rm $(OBJ) $(TARGET)

默认规则

.o文件默认使用.c文件进行编译,可不写.o文件的生成指令

CC = gcc

TARGET = mp3

OBJ = main.o play.o

$(TARGET):$(OBJ)

	$(CC) $^ -o $@

#%.o:%.c 

#	$(CC) -c $^ -o $@

.PHONY:cleans

cleans:

	rm $(OBJ) $(TARGET)

makefile条件分支

ifeq (var1,var2) //如果 var1等于var2 执行语句
...
else
...
endif
ifneq (var1,var2)//如果 var1不等于var2 执行语句
...
else
...
endif

makefile的常用函数

1.patsubst //模式替换函数

.PHONY:all
all:
	echo "$(patsubst %.c,%.o,x.c.c bar.c)"//输出x.c.o bar.o

2.notdir //取文件名函数

.PHONY:all
all;
	echo "$(notdir src/foo.c hacks)"//输出foo.c hacks 去掉了路径,输出文件名

3.wildcard//获取匹配模式文件名函数

.PHONY:all
all;
	echo "$(wildcard *.c)"//输出makefile所在目录的所有.c文件 即当前目录

4.foreach//循环函数

dirs := a b c d
file := $(foreach dir,$(dirs),$(wildcard $(dir)/*))
.PHONY:all
all:
	echo ""$(file)//输出a b c d 目录下的所有文件

makefile终极应用

ARCH ?= x86
ifeq ($(ARCH),x86)
		CC=gcc
else
		CC=arm-linux-guneabihf-gcc
endif

TARGET=mp3 #目標
BUILD_DIR=build#存放目標的目錄 後面不嫩有空格
SCR_DIR=module1 module2  #.c文件所在目錄
INC_DIR=include #頭文件所在目錄
CFLAGS=$(patsubst %,-I%,$(INC_DIR)) #遍歷頭文件,
INCLUDES=$(foreach dir,$(INC_DIR),$(wildcard $(dir)/*.h))#实现检查头文件更新
sources=$(foreach dir,$(SCR_DIR),$(wildcard $(dir)/*.c)) #找出.c文件
OBJS=$(patsubst %.c,$(BUILD_DIR)/%.o,$(notdir $(sources)))
VPATH=$(SCR_DIR) #指定源文件的搜索路径  必须要

$(BUILD_DIR)/$(TARGET):$(OBJS)
	$(CC) $^ -o $@
$(BUILD_DIR)/%.o:%.c $(INCLUDES) | create_build 
	$(CC) -c $< -o $@ $(CFLAGS)

.PHONY:clean create_build

clean:
	rm -r $(BUILD_DIR)
create_build:
	mkdir -p $(BUILD_DIR)


软件下载地址

软件1
mobaxterm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值