如何上手makefile文件

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和可执行文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值