makefile作用就不说了。。。
目前学习只为在win下面使用,就是这么傲骄。
1. 最简单的makefile
敲下 make 之后,会自动找makefile当中的第一个target(目标文件)
Target : Dependencies
目标文件 : 依赖文件
如:
main.exe : main.obj xxx.obj
command...
main.obj : main.c xxx.c
command...
command为对应的compiler 和 linker 名字与所需的选项参数
也可以手动指定要make的目标, make clean (下述)
也可以指定makefile 以及 target ---> make [makefile][target]
2.伪目标
在makefile最开始加上.PHONY: clean
.PHONY: clean
main.exe : main.obj xxx.obj
command...
main.obj : main.c xxx.c
command...
clean:
//用来清除编译过程中产生的多余文件 rm / del
***此处可以不在makefile最开始加上.PHONY: clean, 但是当前make目录下有名为clean的文件时,此时make clean就不行了。
3.自动化变量
$@: 规则的目标文件名
$< : 规则的第一个依赖文件名
$^ : 规则的所有依赖文件列表
如:
main.exe:main.obj xxx.obj
$@ ---> main.exe
$< ---> main.obj
$^ ---> main.obj xxx.obj
***自定义变量
BIN=main.exe
OBJ=main.obj xxx.obj
SRC=main.c xxx.c
$(BIN):$(OBJ)
command...
$(OBJ):$(SRC)
command...
这样当添加新的文件的时候只需要对应的添加.c 与 .obj
4.模式匹配
1).rule 1
%.obj:%.c
command...
2).rule 2
.c.obj:
command...
3).编译当前目录所有c文件
$(BIN):%.exe:%.obj
4).编译多个可执行文件
.PHONY:clean all
BIN=a.exe b.exe
all:$(BIN)
这样当定位到makefile中的第一个target(all)之后, 要生成all就需要生成a.exe b.exe
5.make常用的内嵌函数
$(function arguments)
$(wildcard 模式)
当前目录下匹配模式的文件: src=$(wildcard *.c) ---> 获取所有.c文件
$(src:%.c=%.o), 替换后缀名
OBJ=$(src:%.c=%.o)
第一篇blog就这样完了。
后面会贴上自己需要编译的文件结构以及对应的makefile
是a