今天学的东西不是很多,主要做了几题力扣的二叉树的题目以及学会使用Makefile和linux的一些常用命令
Makefile
目标和依赖
使用make默认执行第一行
all: test @echo "hello, all" test: @echo "hello, test"
// -o 用于指定输出文件的名称 // 链接阶段 指定生成的可执行程序的名称 // 编译阶段 指定生成的目标文件(.o)的名称 // -c用于生成.o文件
main: main.o foo.o g++ main.o foo.o -o main main.o: main.cc g++ -c main.cc -o main.o foo.o: foo.cc g++ -c foo.cc -o foo.o clean: rm main *.o
变量
系统变量
$@
- 目标文件名
$@
代表当前规则的目标文件名。在规则中,你可以使用 $@
来代替目标的名字。
示例:
# $@ 表示目标 main,等价于 g++ -o main main.o foo.o main: main.o foo.o g++ main.o foo.o -o $@ main.o: main.cc g++ -c main.cc -o $@ foo.o: foo.cc g++ -c foo.cc -o $@
$^
- 所有的依赖文件(去重)
$^
代表当前规则的所有依赖文件,且会去重。这个变量非常适合在链接或组合多个依赖文件时使用。
示例:
# $^ 表示 main.o foo.o,等价于 g++ -o main main.o foo.o # $^ 代表目标后的所有依赖文件 main: main.o foo.o g++ $^ -o $@ main.o: main.cc g++ -c $^ -o $@ foo.o: foo.cc g++ -c $^ -o $@
$< - 第一个依赖文件
$< 代表目标的第一个依赖文件
main: main.o foo.o g++ $^ -o $@ %.o:%.cc g++ -c $< -o $@
自定义变量
递归变量
CC = g++ #编译器 main: main.o foo.o $(CC) $^ -o $@ %.o:%.cc $(CC) -c $< -o $@
使用源文件和目标文件列表
CC = g++ #编译器 CFLAGS2 = -c SRCS = main.cc foo.cc OBJS = $(SRCS:.cc=.o) main: $(OBJS) $(CC) $^ $ -o $@ %.o:%.cc $(CC) $(CFLAGS2) $^ -o $@
Linux命令
Linux基础命令
搜索
grep main -c *.cc rbtree.cc:1 test.cc:0 grep main -i *.cc rbtree.cc:int main() grep main -n *.cc rbtree.cc:311:int main()
grep main -r *
grep main -C 10 *.cc
查找文件
find -name rbtree.cc ./c++26/rbtree.cc
// 忽略大小写 find -iname test.cc ./c++26/test.cc ./c++26/TEst.cc ./c++23/test.cc
// 在指定目录下查找 find ./c++26 -name test.cc ./c++26/test.cc
// 查找文件大小大于20k的文件 find . -size +20k ./c++24/a.out ./c++26/a.out ./c++25/1_线程池/a.out ./c++23/a.out // 查找对象小于20k find . -size -20k // 查找对象等于20k find . -size 20k
// 查找目录 find . -type d . ./c++24 ./c++26 ./c++26/TEst.cc ./c++25 ./c++25/静态多态_线程池 ./c++25/线程池 ./c++25/1_线程池 ./c++25/生产消费 ./c++23 // 查找文件 find . -type f
// 查找小于10min修改的文件或者目录 find . -cmin -10 ./c++26 ./c++26/test.cc ./c++26/TEst.cc // 查找大于10min find . -cmin +10 // 近似10min的 find . -cmin 10
// 查找小于1天修改的 find . -ctime -1 ./c++26 ./c++26/a.out ./c++26/test.cc ./c++26/TEst.cc ./c++26/rbtree.cc // 查找大于1天 find . -ctime +1 // 近似10天的 find . -ctime 1
查找进程信息
ps -ef | grep test 5846 5463 99 10:30 pts/0 00:00:06 ./test
感觉这些东西的实用性不大,但好歹也是没有白白的挥霍掉一天。没有方向的时候可以做一下力扣的题目就当打发时间,清理一下思路,明天开始更新基础组件(内存池和mysql连接池),在搞定这两个之后,好好学一下Mysql和Redis(可能就是做一些sql语句的题目,暂时没有什么好的思路)。如果是动手写项目的话,花费的时间长,周期大,而且很多都是业务逻辑代码,而转移到自己的简历上只需要看懂会吹水就行。所以剩余的事件还是以面试题为主,在搞定基本的基础组件,红黑树,线程池,内存池和连接池之后就可以看一些项目的视频,主要是看和理解,然后巩固自己的八股并且搞明白自己简历上写的东西就可以了。回头再将recator框架再好好看看。