先了解一下背景知识(个人理解)。
makefile 文件是什么 ?
Makefile 可以简单的认为是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。为什么要创建 makefile ?
如果需要编译的文件较少,可以一个一个编译。但是如果需要编译的文件较多,这样就需要用到 makefile 文件。为什么我们平时运行程序不需要写 makefile ?
我们使用的集成开发软件 (VS, Matlab 等等)已经创建好了。
C 语言示例
简单起见,本文从一个 C 语言的例子展开,讲讲 makefile 文件的创建。
文件列表:
- main.c
- max.c
- max.h
- min.c
- min.h
- makefile
文件已经放在了公众号后台,回复的关键词在文章结尾。
main.c
# include <stdio.h>
# include "max.h"
# include "min.h"
// main function
int main(int argc, char* argv[])
{
int a = 5;
int b = 3;
int maxNum= max(a,b);
int minNum = min(a,b);
printf("Two numbers a, b:\t");
printf("%d\t%d\n", a,b);
printf("The max value is %d\n The min value is %d\n",maxNum,minNum);
return 0;
}
max.c
// function max
# include "max.h"
int max(int a,int b)
{
if(a>=b)
{
return a;
}else
{
return b;
}
}
max.h
int max (int a, int b);
min.c
# include "min.h"
int min(int a,int b)
{
if(a<b){
return a;
}else{
return b;
}
}
min.h
int min(int a, int b);
makefile 文件创建
注意文件名只能为 makefile 或 Makefile, 且没有后缀。
makefile
# comment after '#'
#tab seperation
#this is make file
CC = gcc //assignment
main: main.c max.o min.o // name: compiling files
$(CC) main.c max.o min.o -o main // begins with Tab!
max.o: max.c
$(CC) -c max.c -o max.o
min.o: min.c
$(CC) -c min.c -o min.o
clean:
rm *.o main
主程序一定要放在最前面。
$(CC) 前面是 Tab 键,不是空格。
打开 Mac 终端或者 win10 shell,更改到当前文件夹 (cd)
cd your-directory-path
输入 make
make

会编译出 main 文件 (这个例子里面没有后缀),然后输入
./main

以上就是输出的结果。
运行出结果后,会有 .o 等中间文件,最后可以用命令 make clean 删除掉。
make clean

删除所有 .o 文件以及文件 main
在我的微信公众号 (柯庆华) 后台回复 makefile 可以获取文中使用到的文件。