嵌入式学习Makefile

嵌入式学习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中的注释

“#”可以用来注释当前行

猜你喜欢

转载自blog.csdn.net/qonsnow/article/details/81177292