代码目录:
add/add_int.c
add/add_float.c
add/add.h
sub/sub_int.c
sub/sub_float.c
sub/sub.h
main.c
文件main.c
#include <stdio.h>
#include "add.h"
#include "sub.h"
intmain(void)
{
}
加操作
#ifdef __ADD_H__
#define __ADD_H__
extern int add_int(int a, int b);
extern float add_float(float a, float b);
#endif
float add_float(float a, float b)
{
}
intadd_int(int a, int b)
{
}
减操作
#ifdef __ADD_H__
#define __ADD_H__
extern float sub_float(float a, float b);
extern int sub_int(int a, int b);
#endif
float sub_float(float a, float b)
{
}
intsub_int(int a, int b)
{
}
命令行编译程序:
#gcc-c add/add_int.c -o add/add_int.o
#gcc-c add/add_float.c -o add/add_float.o
#gcc-c sub/sub_int.c -o sub/sub_int.o
#gcc-c sub/sub_float.c -o sub/sub_float.o
#gcc-c main.c -o main.o
#gcc-o casu add/add_int.o add/add_float.o sub/sub_int.o sub/sub_float.omain.o
#链接生成cacu
多文件的makefile:
#生成casu,“;”右边为目标
casu:add_int.o add_float.o sub_int.o sub_float.omain.o
#生成add_int.o的规则,将add_int.c编译生成目标文件add_int.o
add_int.o:add/add_int.c add/add.h
#生成add_float.o的规则
add_float.o:add/add_float.c add/add.h
#生成sub_int.o的规则
sub_int.o:sub/sub_int.c sub/sub.h
#生成sub_float.o的规则
sub_float.o:sub/sub_float.c sub/sub.h
#生成main.o的规则
main.o:main.c add/add.h sub/sub.h
#清理规则
clean:
使用自定义变量的makefile文件:
CC = gcc
CFLAGES =
OBJS = add/add_int.o add/add_float.o \
TARGET = casu
RM = rm -f
$(TARGET):$(OBJS)
$(OBJS):%.o:%.c
clean:
使用预定义变量的makefile文件:
CFLAGES =
OBJS= add/add_int.o add/add_float.o \
TARGET = casu
$(TARGET):$(OBJS)
$(OBJS):%.o:%.c
clean:
使用自动变量的makefile文件:
CFLAGES =
OBJS= add/add_int.o add/add_float.o \
TARGET = casu
$(TARGET):$(OBJS)
$(OBJS):%.o:%.c
clean:
使用搜索路径的makefile文件:
CFLAGES =
OBJSDIR = .objs
VPATH = add:sub:.
OBJS= add_int.o add_float.o sub_int.o sub_float.o main.o
TARGET = casu
$(TARGET):$(OBJSDIR) $(OBJS)
$(OBJS):%.o:%.c
$(OBJSDIR):
clean:
使用自动推导规则的makefile:
CFLAGS = -Iadd -Isub -O2
VPATH=add:sub
OBJS= add_int.o add_float.o sub_int.o sub_float.o main.o
TARGET = cacu
$(TARGET):$(OBJS)
clean:
使用函数的makefile文件:
CC =gcc
VPATH =add:sub
CFLAGES =
TARGET = casu
DIRS= sub add .
FILES = $(foreach dir, $(DIRS),$(wildcard$(dir)/*.c))
OBJS = $(patsubst %.c,%.o,$(FILES))
$(TARGET):$(OBJS)
clean: