Makefile简单编写实例

  • 格式:pdf
  • 大小:67.12 KB
  • 文档页数:2

Makefile简单编写实例

介绍⼀下Makefile的简单编写例⼦。

编写Makefile的规则就是:

⽬标⽂件:依赖⽂件(tab)编译规则现在我有⼀个⽂件⽬录结构为:

解释⼀下这⼏个⽂件。⾸先我创建makefile⽬录,底下有⼀个include⽬录和src⽬录。include⽬录存放⼀个head.h头⽂件,是我们src中所有

cpp⽂件都要引⽤的头⽂件。

这四个cpp⽂件就是实现加减乘除的功能。把add.cpp看⼀下就知道了:

#include "head.h"

int add(int a, int b)

{

return a + b;

}

其余都⼀样,做各⾃的运算⽽已。⽽main.cpp中我调⽤了它们:

int main(int argc, char const *argv[])

{

printf("sum = %d\n", add(10, 3));

printf("mul = %d\n", mul(10, 3));

printf("sub = %d\n", sub(10, 3));

printf("div = %lf\n", div(10, 3));

return 0;

}

直接编写,易于理解

现在我们要实现的功能就很明了了,编译这⼏个cpp,⽣成⼀个可执⾏⽂件,使得我们能够正确运⾏结果。这⾥⾯我写了两个Makefile⽂

件,第⼀个是Makefile_SB(改名之后),这个⽤来理解makefile的编写规则很有⽤:

main:main.o add.o mul.o sub.o div.o

g++ -o main add.o mul.o sub.o div.o main.o

main.o:main.cpp

g++ -c -I ../include main.cpp

add.o:add.cpp ../include/head.h

g++ -c -I ../include add.cpp

mul.o:mul.cpp ../include/head.h

g++ -c -I ../include mul.cpp

sub.o:sub.cpp ../include/head.h

g++ -c -I ../include sub.cpp

div.o:div.cpp ../include/head.h

g++ -c -I ../include div.cpp

.PHONY:clean

clean:

rm -f *.o

以上,我们遵循我们的规则:

⽬标⽂件:依赖⽂件(tab)编译规则

⾸先,main是我们最后要⽣成的可执⾏⽂件,它依赖于所有的.o⽂件,编译规则就是直接g++ -o .o⽂件即可。

然后,我们的.o⽂件呢,⼜依赖于.c⽂件,所以下⾯也要写。其中要注意,头⽂件在上层⽬录的include下,所以要加上:

-I ../include

⾄于.PHONY,是⼀个伪⽬标,我们真正的⽬标都是会⽣成的,⽽clean只是我们清除⽂件使⽤的,它并不⽣成⼀个⽬标⽂件,所以我们使

⽤伪⽬标来执⾏这个命令。

简洁编写,使⽤函数

在我⽬录下的Makefile⽂件,才是我最后使⽤的那个⽂件:

#获取.cpp⽂件SrcFiles=$(wildcard *.cpp)

#使⽤替换函数获取.o⽂件

ObjFiles=$(patsubst %.cpp,%.o,$(SrcFiles))

#⽣成的可执⾏⽂件

all:main

#⽬标⽂件依赖于.o⽂件

main:$(ObjFiles)

g++ -o $@ -I ../include $(SrcFiles)

#.o⽂件依赖于.cpp⽂件,通配使⽤,⼀条就够

%.o:%.cpp

g++ -c -I ../include $<

.PHONY:clean all

clean:

rm -f *.o

rm -f main 有了我们上⾯的规则讲解之后,这个就能很好的理解。先介绍两个函数:

wildcard函数,就是获取指定的⽂件

patsubst函数,有替换功能。

⽽SrcFiles和ObjFiles都是变量,它不⽤特别的定义,直接写出来就是定义了。再写⼀下其它符号的意义,记住就⾏了:

$(Files),取File变量的值。

$@ ⽬标⽂件

$^ 全部依赖

$< 第⼀个依赖

$? 第⼀个变化的依赖