多目录下多文件 makefile编写
来源:互联网 发布:hive从本地导入数据 编辑:程序博客网 时间:2024/06/05 08:49
前面已经分享了单目录项下多文件的makefile的编写,现在来看看多目录下多文件makefile的编写;
在做项目时,一般文件都会分几个目录来存放;基本的是 include/ bin/ src/ obj/ lib/ tools/,这几个文件;我先说下我的文件存放目录,用ls -R可以查看到所有文件:./include/common.h ./src/main.c ./src/printStatus.c 就三个文件,其中*.c 文件都依赖于 *.h文件;
同样的先上第一版makefile:
CC=gcc objects=obj/main.o obj/printStatus.o bin/main:$(objects) $(CC) -o bin/main $(objects) obj/main.o:src/main.c include/common.h $(CC) -o obj/main.o -c src/main.c -Iinclude obj/printStatus.o:src/printStatus.c include/common.h $(CC) -o obj/printStatus.o -c src/printStatus.c -Iinclude clean: rm -rf $(objects) bin/main上面的makefile就是gcc命令的拼凑起来的,下面来分享下比较通用的多目录下的makefile;
在看多目录的makefile时,先来理解下几个函数和变量;
函数:
wildcard 这是扩展通配符函数,功能是展开成一列所有符合由其参数描述的文 件名,文件间以空格间隔;比如:罗列出src下的所有.c文件:$(wildcard ${SRC}/*.c)
patsubst 这是匹配替换函数, patsubst ( 需要匹配的文件样式,匹配替换成什么文件,需要匹配的源文件)函数。比如:用src下的*.c替换成对应的 *.o文件存放到obj中:$(patsubst %.c, ${OBJ}/%.o, $(notdir $(SOURCE)))
notdir 这是去除路径函数,在上面patsubst函数中已经使用过,去除SOURCE中文件的所有目录,只留下文件名;
变量:
$@:表示目标文件;一般是在规则中这么用:gcc -o $@ $(object);
$^:表示所有依赖文件;一般是在规则中这么用:gcc -o $@ $^ ;用所有依赖文件链接成目的文件;
$<:表示第一个依赖文件;在规则中使用:gcc -o $@ -c $< ;其实这个时候就是每个依赖文件生成一个目的文件;
第二版makefile
#把所有的目录做成变量,方便修改和移植 BIN = ./bin SRC = ./src INC = ./include OBJ = ./obj #提前所有源文件(即:*.c文件)和所有中间文件(即:*.o) SOURCE = $(wildcard ${SRC}/*.c) OBJECT = $(patsubst %.c,${OBJ}/%.o,$(notdir ${SOURCE})) #设置最后目标文件 TARGET = main BIN_TARGET = ${BIN}/${TARGET} CC = gcc CFLAGS = -g -Wall -I${INC} #用所有中间文件生成目的文件,规则中可以用 $^替换掉 ${OBJECT} ${BIN_TARGET}:${OBJECT} $(CC) -o $@ ${OBJECT} #生成各个中间文件 ${OBJ}/%.o:${SRC}/%.c $(CC) $(CFLAGS) -o $@ -c $< .PHONY:clean clean: find $(OBJ) -name *.o -exec rm -rf {} \; #这个是find命令,不懂的可以查下资料 rm -rf $(BIN_TARGET)这个makefile的好处就是通用性,里面不涉及到具体的文件名,当你往src目录中添加新文件时,可以不需要修改makefile,所以这是个非常好的工具;
- 多目录下多文件 makefile编写
- 单目录下多文件 makefile编写
- 多文件及多目录下MakeFile文件的编写
- 多文件多目录 Makefile文件编写
- Linux下多目录的Makefile编写
- 多目录Makefile编写
- 多文件多目录的Makefile文件编写
- linux 下 多文件 Makefile 编写
- makefile编写小结:多目录,单Makefile
- 多文件、多目录的Makefile的编写
- makefile多文件如何编写
- 多目录工程构建Makefile的编写
- 多个目录Makefile编写模板
- Linux Makefile多目录的编写
- 多目录时Makefile 的编写方法
- 多个文件目录下Makefile的写法
- 多个文件目录下Makefile的写法
- 多个文件目录下Makefile的写法
- 窗口自动布局MFC(转发)
- 启动Tomcat6.x时manager does not exist or is not a readable directory
- HDU 1312--Red and Black【DFS】
- 第四周项目一——三角形类的构造函数(3)
- lua 提取 字符串操作 可以用在c 程序当中 2
- 多目录下多文件 makefile编写
- 一种 Roguelike 地牢生成算法
- GreenDao官方文档翻译
- R学习笔记
- 第三章作业
- Horspool 算法C++11实现(支持中英文混合搜索)
- mac 下面cocos 3.2工程的创建和编译
- android之迅速了解正则表达式
- Handler和HandlerThread