写一个简单的makefile

简单说明一下makefile的基本语法

target...: prerequisites...
    command
    ...

冒号前的文件依赖于冒号后的文件,就是说如果prerequisites的最后修改时间晚于target,那么就会执行后面的命令command来生成新的target文件。command为普通的shell命令,注意命令前要缩进。

另外makefile语法中.o文件会被自动依赖于同名的.c文件,例如例子中的main.o会被自动依赖于文件mian.c 。所以如果只有main.c文件被修改时,重新执行make命令,只有依赖于main.o的文件会被重新构建。

还要说明的一点是:例子中main.c文件被设置依赖于头文件add.h和sub.h,虽然一般情况下头文件的修改一般会导致对应源代码文件的修改,使得依赖于这些源代码文件的文件被重新编译,貌似我们没有必要设置头文件的依赖性。但是如果头文件中有声明一些全局变量或含有宏定义时,情况就会不同。若是修改了头文件中的全局变量或宏定义,设定依赖性的文件能够被重新编译,未设置的文件则不能。所以说设置头文件的依赖性还是有必要的。

makefile文件

objects = main.o add.o sub.o 
prac : $(objects)
    gcc -o prac $(objects)
main.o: add.h sub.h
clean:
    rm prac $(objects) 

main.c

#include <stdio.h>
#include "add.h"
#include "sub.h"

int main()
{
    int a = 5, b = 3;
    printf("%d\n", add(a,b));
    printf("%d\n", sub(a,b));
    return 0;
}

add.h

#ifndef ADD_H_
#define ADD_H_
int add(int a, int b);
#endif

sub.h

#ifndef SUB_H_
#define SUB_h_
int sub(int a, int b);
#endif

add.c

#include "add.h"
int add(int a, int b)
{
    return a + b;
}

sub.c

#include "sub.h"
int sub(int a, int b)
{
    return a - b;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值