Makefile完全攻略非常经典

来源:互联网 发布:中航618知乎 编辑:程序博客网 时间:2024/05/16 15:03

记linux网络编程中Makefile实例有感:

    工程中的代码如下 add_int.c  add_float.c sub_int.c sub.float.c add.h sub.h main.c

/*add_int.c*/

int add_int(int a, int b)
{
    return a+b;
}

 

/*add_float.c*/

int add_float(int a, int b)
{
    return a+b;
}

 

/*sub_int.c*/

int sub_int(int a, int b)
{
    return a-b;
}

 

/*sub_float.c*/

int sub_float(int a, int b)
{
    return a-b;
}

/*add.h*/
#ifdef __ADD_H__
#define __ADD_H__
extern float add_float(float a, float b);
extern int add_int(int a, int b);
#endif /*__ADD_H__*

 

*sub.h*/
#ifdef __ADD_H__
#define __ADD_H__
extern float sub_float(float a, float b);
extern int sub_int(int a, int b);
#endif /*__ADD_H__*

/*main.c*/

#include <stdio.h>
#include "add.h"
#include "sub.h"
int main(void)
{
 int a = 10, b = 12;
 float x = 1.23456, y = 9.87654;
 printf("int a+b IS:%d/n",add_int(a,b)); 
  printf("float a+b IS:%d/n",add_float(a,b));
 printf("int a-ib IS:%d/n",sub_int(a,b));
    printf("float a-b IS:%d/n",sub_float(a,b));
}

 

没有使用规则写Makefile如下:

cacu:add_int.o add_float.o sub_int.o sub_float.o main.o
 arm-softfloat-linux-gnu-gcc -o cacu add_int.o add_float.o sub_int.o /
  sub_float.o main.o
add_int.o:add_int.c add.h
 arm-softfloat-linux-gnu-gcc -c -o add_int.o add_int.c
add_float.o:add_float.c add.h
 arm-softfloat-linux-gnu-gcc -c -o add_float.o add_float.c
sub_int.o:sub_int.c sub.h
 arm-softfloat-linux-gnu-gcc -c -o sub_int.o sub_int.c
sub_float.o:sub_float.c sub.h
 arm-softfloat-linux-gnu-gcc -c -o sub_float.o sub_float.c
main.o:main.c add.h sub.h
 arm-softfloat-linux-gnu-gcc -c -o main.o main.c -Iadd -Isub
clean:
 rm -f cacu add_int.o add_float.o sub_int.o sub_float.o main.o

 

用户自定义变量写Makefile如下:

CC = arm-softfloat-linux-gnu-gcc    (CC被定义为arm-softfloat-linux-gnu-gcc)
CFLAGS = -Iadd -Isub -O2               (加入头文件搜索路径sub和add)
OBJS = add_int.o add_float.o sub_int.o sub_float.o main.o  (OBJS表示目标文件)
TARGET = cacu                                (最终生成目标)
RM = rm -f                                       (删除的命令)
$(TARGET):$(OBJS)
 $(CC) -o $(TARGET) $(OBJS) $(CFLAGS)
$(OBJS):%.o:%.c                           (将OBJS中所有扩展名为.o的文件替换为.c的文件)
 $(CC) -c $(CFLAGS) $< -o $@        (编译生成目标文件)
clean:
 -$(RM) $(TARGET) $(OBJS)

 

预定义变量写Makefile如下:

CC = arm-softfloat-linux-gnu-gcc
CFLAGS = -Iadd -Isub -O2
OBJS = add_int.o add_float.o sub_int.o sub_float.o main.o
TARGET = cacu
RM = rm -f
$(TARGET):$(OBJS)
 $(CC) -o $(TARGET) $(OBJS) $(CFLAGS)
#$(OBJS):%.o:%.c    
# $(CC) -c $(CFLAGS) $< -o $@
clean:
 rm $(TARGET)
 rm $(OBJS)

使用自动变量写Makefile如下:
CC = arm-softfloat-linux-gnu-gcc
CFLAGS = -Iadd -Isub -O2
OBJS = add_int.o add_float.o sub_int.o sub_float.o main.o
TARGET = cacu
$(TARGET):$(OBJS)
# $(CC) $@ -o $< $(CFLAGS)
 $(CC) -o $(TARGET) $(OBJS) $(CFLAGS)
$(OBJS):%.o:%.c    
 $(CC) $< -c $(CFLAGS) -o $@
clean:
 -$(RM) $(TARGET) $(OBJS)

 

 

原创粉丝点击