linux makefile练习

1.
main.c文件

#include <stdio.h>
#include "add.h"
#include "sub.h"
int main(void)
{
    int a=1,b=2;
    float x=2.3,y=2.4;

    printf("int a+b=%d\n",add_int(a,b));
    printf("float x+y=%f\n",add_float(x,y));
    printf("int a-b=%d\n",sub_int(a,b));
    printf("float x-y=%f\n",sub_float(x,y));
    return 0;
}
2.
add/add_int.c文件
int add_int(int a,int b)
{
    return a+b;
}
3.
add/add_float.c文件
float add_float(float a,float b)
{
    return a+b;
}
4.
add/add.h文件
#ifndef __ADD_H__
#define __ADD_H__
extern int add_int(int a,int b);
extern float add_float(float a,float b);
#endif
5.
sub/sub_float.c文件
float sub_float(float  a,float b)
{
    return a-b;
}
6.
sub/sub_int.c文件
int sub_int(int a,int b)
{
    return a-b;
}
7.
sub/sub.h文件
#ifndef __SUB_H_
#define __SUB_H_
extern int sub_int(int a,int b);
extern float sub_float(float a,float b);
#endif
8.
总控makefile文件
CC=gcc
TARGET=test
export OBJSDIR=${shell pwd}/objs

RM=rm -f
CFLAGS= -Iadd  -Isub -O2

$(TARGET):$(OBJSDIR) main.o
    $(MAKE) -C add
    $(MAKE) -C sub
    $(CC) -o $(TARGET) $(OBJSDIR)/*.o
main.o:%.o:%.c
    $(CC) -c $< -o $(OBJSDIR)/$@ $(CFLAGS) -Iadd -Isub
$(OBJSDIR):
    mkdir  -p $@
clean:
    $(RM) -r $(TARGET) $(OBJSDIR) $(OBJSDIR)/*.o
9.
add/makefile文件
CC=gcc
OBJS=add_int.o add_float.o

RM=rm -f
CFLAGS= -Iadd  -Isub -O2
all:$(OBJS)
$(OBJS):%.o:%.c
    $(CC) -c $< -o $(OBJSDIR)/$@ $(CFLAGS)
clean:
    $(RM) $(OBJS)
10.
sub/makefile文件
CC=gcc
OBJS=sub_int.o sub_float.o

RM=rm -f
CFLAGS= -Iadd  -Isub -O2
all:$(OBJS)
$(OBJS):%.o:%.c
    $(CC) -c $< -o $(OBJSDIR)/$@
clean:
    $(RM) $(OBJS)

11.
注意事项:makefile中的gcc前面需要加[tab]。
”$(TARGET):$(OBJSDIR) main.o“ 依赖关系有先后顺序,自上而下,先“$(OBJSDIR)”再“main.o”.
$@是目标文件,代指上一行的冒号前的文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值