学习编写Makefile

今天尝试编写一个简单的Makefile,偶然发现了用vim原来这么顺手。看来以后免不了还要倒腾一番。

上图,这是要编辑的几个文件内容。


如下是几个文件的代码:

add.h

/*
@filename add.h
*/
#ifndef _ADD_H
#define _ADD_H
int add(int a, int b);
#endif


gcd.h

/*
@filename gcd.h
*/
#ifndef _GCD_H
#define _GCD_H
int gcd(int a, int b);
#endif


add.c

/*
@filename add.c
用途:计算两个数的和
*/
#include "add.h"
int add(int a, int b)
{
    return a+b;
}


gcd.c

/*
@filename gcd.c

用途:计算两个数的最大公约数
*/
#include "gcd.h"
int gcd(int a, int b)
{
    int c;
    while(b)
    {
        c = a % b;
    	a = b;
	    b = c;
    }
   
    return a;
}


main.c

/*
@author kehr
@time 2013.11.11
@filename main.c

用于练习Makfile的编写
*/
#include <stdio.h>
#include "gcd.h"
#include "add.h"
int main()
{
    int a,b;
    while(1)
    {
	printf("(end with 0 0)input 'a' and 'b':");
	scanf("%d %d",&a,&b);
	if(a==0 && b==0)break;
        printf("%d 和 %d的最大公约数是:%d\n",a,b,gcd(a,b));
        printf("%d 和 %d的最小公倍数是:%d\n",a,b,a*b/gcd(a,b));
        printf("%d 和 %d的和是:%d\n",a,b,add(a,b));

    }
}

Makefile

#编译main.c add.c gcd.c 生成 main文件

#定义变量
O_FILE = main.o add.o gcd.o

main:$(O_FILE)
	gcc -o main $(O_FILE)
main.o: main.c add.h gcd.h
	gcc -c main.c
add.o:add.h add.c
	gcc -c add.c
gcd.o:gcd.h gcd.c
	gcc -c gcd.c
clean:
	rm $(O_FILE)

Makefile的简单知识:
1.在Makefile中#开始的行都是注释行.
2.Makefile中最重要的是描述文件的依赖关系的说 明.
一般的格式是:
 target: components 
 TAB rule 
//第一行表示的是依赖关系.
//第二行是规则(任意的Shell命令)
这里的TAB指的是一次TAB键的点击
3.
target ... : prerequisites ...	
        command......1. 
      target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)
这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command
prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容。
如果我们改变了“add.h”,那么,main.o、add.o都会被重编译,并且,可执行文件main会被重链接。
好了,笔记完成。
接下来看执行make命令后的效果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值