多子目录的makefile编译库模板
2017-02-06 00:32
519 查看
经过不断的实验,终于改出来了一个可以用于多个子目录,多个文件的Makefile模板,只用来生成静态库文件,后面再继续添加内容吧
先来看下目录结构
具体的Makefile文件内容:
仔细看的话,其实这个Makefile中也没有什么东西,也大概完全可以看懂,但是在今天之前要是让我从0开始手写或者在别人的Makefile中改出一个来我还真有点含糊。但是现在不会了,今天晚上试了好多终于有成果了。
看下最后执行的效果:
可以看到,每个.c文件对应的.o文件都在同一个目录,最后的.a文件在项目的根目录,这正是我想要的,一点都不差。而且我还写了个main.c来测试生成的.a文件,结果也是正确的。
收工。
先来看下目录结构
[zhang@zwfedora23 libs]$ tree . ├── Makefile ├── src │ ├── libs1.c │ ├── libs1.h │ ├── libs2.c │ ├── libs2.h │ └── main.c ├── src1 │ ├── libs1a.c │ ├── libs1a.h │ ├── libs1.c │ └── libs1.h └── src2 ├── libs2.c └── libs2.h 3 directories, 12 files [zhang@zwfedora23 libs]$
具体的Makefile文件内容:
LIB_SRC1 = ./src1 LIB_SRC2 = ./src2 LIB_A := libs.a #VPATH = $(LIB_SRC1) $(LIB_SRC2) SRC := $(wildcard $(LIB_SRC1)/*.c) SRC += $(wildcard $(LIB_SRC2)/*.c) OBJS := $(patsubst %.c,%.o,$(SRC)) CC:=gcc CFLAGS:= -I./ .PNONY:all clean all: $(LIB_A) clean: @rm -f $(OBJS) @rm -f $(LIB_A) $(OBJS):%.o:%.c $(CC) -c $(CFLAGS) $^ -o $@ $(LIB_A):$(OBJS) @echo '$$OBJS'=$(OBJS) @echo '$$(SRC)/*.c'=$(SRC) @echo '$$@' = $@ @echo '$$^' = $^ @echo '$$<' = $< $(AR) rcv $@ $^
仔细看的话,其实这个Makefile中也没有什么东西,也大概完全可以看懂,但是在今天之前要是让我从0开始手写或者在别人的Makefile中改出一个来我还真有点含糊。但是现在不会了,今天晚上试了好多终于有成果了。
看下最后执行的效果:
[zhang@zwfedora23 libs]$ make gcc -c -I./ src1/libs1.c -o src1/libs1.o gcc -c -I./ src1/libs1a.c -o src1/libs1a.o gcc -c -I./ src2/libs2.c -o src2/libs2.o $OBJS=./src1/libs1.o ./src1/libs1a.o ./src2/libs2.o $(SRC)/*.c=./src1/libs1.c ./src1/libs1a.c ./src2/libs2.c $@ = libs.a $^ = src1/libs1.o src1/libs1a.o src2/libs2.o $< = src1/libs1.o ar rcv libs.a src1/libs1.o src1/libs1a.o src2/libs2.o a - src1/libs1.o a - src1/libs1a.o a - src2/libs2.o [zhang@zwfedora23 libs]$ tree . ├── libs.a ├── Makefile ├── src │ ├── libs1.c │ ├── libs1.h │ ├── libs2.c │ ├── libs2.h │ └── main.c ├── src1 │ ├── libs1a.c │ ├── libs1a.h │ ├── libs1a.o │ ├── libs1.c │ ├── libs1.h │ └── libs1.o └── src2 ├── libs2.c ├── libs2.h └── libs2.o 3 directories, 16 files [zhang@zwfedora23 libs]$
可以看到,每个.c文件对应的.o文件都在同一个目录,最后的.a文件在项目的根目录,这正是我想要的,一点都不差。而且我还写了个main.c来测试生成的.a文件,结果也是正确的。
[zhang@zwfedora23 libs]$ gcc src/main.c -L./ -ls -o test [zhang@zwfedora23 libs]$ ./test hello hello,libs2 [zhang@zwfedora23 libs]$ ls libs.a Makefile src src1 src2 test [zhang@zwfedora23 libs]$
收工。
相关文章推荐
- makefile编写---单个子目录编译模板
- makefile编写---单个子目录编译自动变量模板ok
- c.cpp混合编译的makefile模板
- 一个简单的makefile的实现,编译当前目录下所有的.c文件
- 混合编译c和cpp的makefile模板
- 一个将目录内所有c代码分别编译成独立的out文件的Makefile
- Makefile编译目录下多个文件以及函数wildcard用法
- 两个编译2.4与2.6内核模块的Makefile 模板
- makefile 自动编译同一个目录下的所有文件
- 写驱动时交叉编译之makefile编写模板(tiny6410)
- Linux内核模块LKM编译-自制Makefile模板
- GNU/Linux智能Makefile模板(多目录,多文件)
- 两个编译2.4与2.6内核模块的Makefile 模板
- Makefile模块编译模板
- 批量编译目录下文件的Makefile
- 多层目录编译的makefile文件编写
- 多目录多源文件的驱动Makefile模板
- linux2.6内核模块编译的makefile模板
- 复杂多目录的Makefile模板及示例
- Linux内核模块LKM编译-自制Makefile模板