Make
Make 使用 Makefile 构建程序
all: src/main.c gcc src/main.c -o target/main main: src/main.c gcc $< -o target/$@ .PHONY: clean clean: rm -rf target/*
执行 make 命令会读取当前目录中的 makefile,并处理第一条规则,这里为 all
声明 clean 是 Phony Target,执行 make clean 就不会检查是否存在名为 clean 的文件
通配符:https://www.gnu.org/software/make/manual/make.html#Wildcards
# 定义变量时不会发生通配符扩展 objects = *.o # 要设置为扩展,请改用 objects = $(wildcard *.o) edit : $(objects) cc -o edit $(objects)
替换:https://www.gnu.org/software/make/manual/make.html#Text-Functions
# 后缀 .c 替换为 .o objects = $(patsubst %.c,%.o,$(wildcard *.c)) objects = $($(wildcard *.c):%.c=%.o) objects = $($(wildcard *.c):.c=.o) # 加上路径 temp objects = $(patsubst %,temp/%,$(wildcard *.c))
foreach:https://www.gnu.org/software/make/manual/make.html#Foreach-Function
# 加上路径 temp objects = $(foreach file, $(wildcard *.c), temp/$(file)) # 查找 a b c d 四个目录下的所有文件 dirs = a b c d files = $(foreach dir,$(dirs),$(wildcard $(dir)/*))
make 命令参数:https://www.gnu.org/software/make/manual/make.html#Options-Summary
-n 仅执行构建任务,不实际编译或链接文件 -B 构建过程中不进行自动补全 # 仅列出构建过程中所需的步骤,不实际执行 -nB
生成 compile_commands.json:https://github.com/rizsotto/Bear
sudo apt install -y bear make clean && bear -- make qemu