1.makefile文件及make介绍:
makefile:Makefile 文件描述了整个工程的编译、连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建哪些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。尽管看起来可能是很复杂的事情,但是为工程编写Makefile 的好处是能够使用一行命令来完成“自动化编译”,一旦提供一个(通常对于一个工程来说会是多个)正确的 Makefile。编译整个工程你所要做的事就是在shell 提示符下输入make命令。整个工程完全自动编译,极大提高了效率。
make是一个命令工具,它解释Makefile 中的指令。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样。而且在Makefile 中可以使用系统shell所提供的任何命令来完成想要的工作。Makefile在绝大多数的IDE 开发环境中都在使用,已经成为一种工程的编译方法。
2.简单示例
单个源文件,我们直接使用命令行生成可执行文件即可;但涉及到多个文件的话,涉及到后续的编译、链接以及清除的话,直接使用命令行已不再方便,因此为了有效的管理可通过编写makefile文件实现。
如下面简单的例子,一般.c和.h文件成对出现,便于代码的重复利用和管理。
这里我们实现两个功能,在数组中查找最大值,在数组中查找最小值:因此可得到四个文件findMax.c,findMax.h,findMin.c,findMin.h
2.1findMax.c如下:
#include "findMax.h"
int find_max(int arr[],int n)
{
int m=arr[0];
int i;
for(i=0;i<n;i++)
{
if(arr[i]>m)
{
m=arr[i];
}
}
return m;
}
2.2findMax.h
int find_max(int arr[],int n);
2.3findMin.c
#include "findMin.h"
int find_min(int arr[],int n)
{
int m=arr[0];
int i;
for(i=0;i<n;i++)
{
if(arr[i]<m)
{
m=arr[i];
}
}
return m;
}
2.4finMin.h
int find_min(int arr[],int n);
2.5 main.c
#include "findMax.h"
#include "findMin.h"
#include <stdio.h>
int main()
{
int arr[5]={1,3,8,4,5};
int m=find_max(arr,5);
int n=find_min(arr,5);
printf("max:%d\n",m);
printf("min:%d\n",n);
return 0;
}
2.6makefile编写
#使命的编译命令
CC = gcc
LIB = -lpthread
#生成多个可执行文件的话使用all,生成单个可执行文件不需要
#如all:main_max,main_min,需要对上面程序拆分
#格式如下:
#目标文件:依赖
# 命令
main:findMax.o findMin.o
$(CC) main.c finMax.o findMin.o -o $(LIB) main
#生成findMax.o
findMax.o:findMax.c
$(CC) -c findMax.c
findMin.o:findMin.c
$(CC) -c findMin.c
#make clean 清除.o文件和可执行文件
clean:
rm *.o main
2.7以上文件在同一文件夹中,执行make命令生成可执行文件,执行make clean命令清楚.o和可执行文件