写给robocup机器人实验室的新成员

随着项目的增大,通过g++命令编译每一个源文件费时费力。于是出现了Makefile,使用Makefile,可以通过make命令直接编译出可执行文件。

一个简单的Makefile示例

创建一个源文件,名字随意,我这里是main.cpp
新建一个名为Makefile的文件,里面写:

main: main.o
	g++ main.o -o main
main.o: main.cpp
	g++ -c main.cpp 

把终端切换Makefile目录下,运行命令make

生成了main.omain可执行文件。

Makefile基本格式

目标:依赖

【Tab】命令

以上称为一条规则

上面的Makefile中,有两条规则

  • 冒号前的main和main.o是目标
  • 冒号后的文件名代表依赖
    第一个规则的依赖是main.o,表示要生成main需要先生成main.o,第二个规则的依赖是mian.cpp
  • 目标和依赖下面这一行是命令
    通过这个命令得到目标

例子:

上次我们写了一个类,有3个文件。

在三个文件的目录下写如下Makefile:

say: main.o Test.o
	g++ main.o Test,o -o say
main.o: main.cpp
	g++ -c main.cpp
Test.o: Test.cpp
	g++ -c Test.cpp

运行make就能生成say可执行,以及两个.o编译文件。

伪目标

没有依赖只要执行动作的目标称为伪目标(phony targets)

.PHONY: clean
clean:
	rm -f say main.o Test.o

.PHONYclean目标声明为伪目标。

添加伪目标后的完整makefile:

say: main.o Test.o
	g++ main.o Test,o -o say
main.o: main.cpp
	g++ -c main.cpp
Test.o: Test.cpp
	g++ -c Test.cpp
	
.PHONY: clean
clean:
	rm -f say main.o Test.o

此时运行make命令可以编译所有文件并生成可执行文件。
运行make clean命令可以删除生成的.o文件和可执行文件。