记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)