ps: 这里 不是很明白?尤其是 后面 三个变量,什么区别?
$@ 代表目标
$^ 代表全部依赖
$< 第一个依赖
$? 第一个变化的依赖
- makefile
makefile 命名规则makefileMakefile
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 app2app1:$(objFiles)gcc $(objFiles) -o $@ -I $(headPath)app2:$(objFiles)gcc $(objFiles) -o $@ -I $(headPath)%.o:%.cgcc -c $< -I $(headPath) -o $@#.PHONY 防止目标有歧义
.PHONY:clean alltest:# - 的作用是 就算这行出错了,下面的也要继续执行# @的作用是 不显示输出-@echo $(srcFiles)echo $(objFiles)clean:rm -rf *.orm -rf app1 app2
执行指定的makefile
make -f makefile1
注意事项:
如果出现了 :*** missing separator. Stop.错误
在/etc/vim/vimrc 文件里面,添加这样一句
autocmd FileType make set noexpandtab