![此博文包含图片](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
标签: linux.makefile杂谈 | 分类: Linux系统管理 |
工程中的代码分别存放在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"
int main(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)
{
}
int add_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)
{
}
int sub_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.o main.o
#链接生成cacu
多文件的makefile:
#生成casu,“;”右边为目标
casu:add_int.o add_float.o sub_int.o sub_float.o main.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: