ps: 这里 不是很明白?尤其是 后面 三个变量,什么区别?
$@ 代表目标
$^ 代表全部依赖
$< 第一个依赖
$? 第一个变化的依赖
- makefile
makefile 命名规则
makefile
Makefile
makefile 三要素
目标
依赖
规则命令
写法:
目标:依赖
tab键规则命令
可以定义变量 srcFiles=main.c jia.c jian.c cheng.c chu.c
变量的使用:$(srcFiles), $(变量名)
makefile隐含规则:默认处理第一个目标
函数:
wildcard 可以进行文件匹配
patsubst 内容的替换
makefile的变量
$@ 代表目标
$^ 代表全部依赖
$< 第一个依赖
$? 第一个变化的依赖
代码示例:
srcFiles=$(wildcard *.c)
objFiles=$(patsubst %.c, %.o, $(srcFiles))
headPath=./head
# 定义伪目标, 如果指向生成app1,就执行 make app1
all:app1 app2
app1:$(objFiles)
gcc $(objFiles) -o $@ -I $(headPath)
app2:$(objFiles)
gcc $(objFiles) -o $@ -I $(headPath)
%.o:%.c
gcc -c $< -I $(headPath) -o $@
#.PHONY 防止目标有歧义
.PHONY:clean all
test:
# - 的作用是 就算这行出错了,下面的也要继续执行
# @的作用是 不显示输出
-@echo $(srcFiles)
echo $(objFiles)
clean:
rm -rf *.o
rm -rf app1 app2
执行指定的makefile
make -f makefile1
注意事项:
如果出现了 :*** missing separator. Stop.错误
在/etc/vim/vimrc 文件里面,添加这样一句
autocmd FileType make set noexpandtab