Makefile

 

使用GCC的命令进行程序编译时,当程序是单个文件时编译是比较方便的,但当工程中的文件数目增多,甚至非常庞大,并且目录结构关系复杂时,便需要通过makefile来进行程序的编译。

示例:

目录MakeFile_Demo下有三个文件来合作进行加减乘除的计算

makefile编译python程序 makefile如何编译_Makefile

makefile编译python程序 makefile如何编译_makefile编译python程序_02

makefile编译python程序 makefile如何编译_makefile编译python程序_03

makefile编译python程序 makefile如何编译_Makefile_04

使用Makefile编译:

makefile编译python程序 makefile如何编译_字符串_05

makefile编译python程序 makefile如何编译_字符串_06

Makefile中代码格式:

目标对象:依赖对象

要生成目标对象所执行的命令

Makefile文件中的代码分析为:

第1行:最终要生成的目标文件Calculate文件依赖于main.o文件和calculate.o文件

第2行:gcc方式编译代码,目标文件是Calculate,源文件是main.o和calculate.o

第3行:生成Calculate文件所依赖的文件main.o又依赖于main.c

第4行:gcc方式编译生成目标文件main.o

第5行:生成Calculate文件所依赖的文件calculate.o又依赖于calculate.c

第6行:gcc方式编译生成目标文件calculate.o

第7行:.PHONY后面的clean表示的是一个伪造的目标,并不是真正目标文件的依赖

第8行:目标对象clean不依赖于任何依赖对象,因为clean是一个伪目标

第9行:生成clean要执行的代码,即调用make clean命令时,执行代码rm –rf *.o Calculate

 

makefile编译python程序 makefile如何编译_文件名_07

makefile编译python程序 makefile如何编译_Makefile_08

 

使用Makefile中特殊符号编译:

$@                             代表目标文件

$^                               代表所有的依赖文件

$<                               代表第一个依赖文件

makefile编译python程序 makefile如何编译_makefile编译python程序_09

makefile编译python程序 makefile如何编译_字符串_10

makefile编译python程序 makefile如何编译_文件名_11

执行过程和结果与第一种编译方式相同。

 

使用变量编译:

wildcard:获取匹配模式的文件名函数

格式:$(wildcard PATTERN)

此函数的功能是查找当前目录下所有符合模式PATTERN的文件名,其返回值是以空格分割的、当前目录下的所有符合模式PATTERN的文件名列表。

例如:返回当前目录下所有扩展名为.c的文件列表

$(wildcard *.c)

patsubst:模式替换函数

格式:$(patsubst pattern,replacement,text)

此函数的功能是查找字符串text中按照空格分割的单词,将符合模式pattern的字符串替换成replacement。函数的返回值是替换后的新字符串。

例如:将.c文件替换为.o文件

$(patsubst %.c,%.o,$(wildcard *.c))

输出的字符串将当前扩展名为.c的文件替换为.o的文件列表。

makefile编译python程序 makefile如何编译_文件名_12

makefile编译python程序 makefile如何编译_目标文件_13

makefile编译python程序 makefile如何编译_makefile编译python程序_14

运行过程和结果与前两种方式相同。