嵌入式学习Makefile
make是一个工具,用来构建和管理软件享目。之前是个编译一个hello.c的程序需要一条gcc命令。但是一个软件工程有大量的源文件需要gcc编译,手工逐条敲命令编译显然是低效且浪费时间的。
make能够使整个软件工程的编译,链接只需要一个命令就可以完成。
make在执行时,需要一个Makefile文件。Makefile文件描述了整个工程的编译,链接规则。其中包括:工程中有哪些源文件,要如何编译。需要哪些库文件,去哪里找。
Makefile语法
Makefile文件中记录了一系列规则
target:prerequisites
command
target:目标文件
prerequisites:目标文件的依赖
command:产生目标文件的命令
三者合一就是一条规则
Makefile 举例
hello:main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
main.o: main.c
gcc -c main.c
func1.o: func1.c
gcc -c func1.c
func2.o: func2.c
gcc -c func2.c
.PHONY:clean
clean:
rm -f hello.o main.o func1.o func2.o
经过测试make只能识别文件名为makefile或者Makefile的文件
.PHONY关键字
可以用.PHONY关键字声明伪目标,为目标就是只有执行动作,没有依赖的目标。
定义Makefile变量
obj = main.o func1.o func2.o func3.o
hello:$(obj)
gcc $(obj) -o hello
Makefile中系统默认的自动化变量
- $^: 代表所有依赖文件
- $@ 代表目标
- $< 代表第一个依赖文件
hello: main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
等价于
hello:main.o func1.o func2.o
gcc $^ -o $@
Mailefile中的注释
“#”可以用来注释当前行