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

 


https://www.gnu.org/software/make

https://ruanyifeng.com/blog/2015/02/make.html

posted @ 2020-04-08 10:29  江湖小小白  阅读(479)  评论(0编辑  收藏  举报