最近将Makefile的编写进行了整理和提炼了一下,大致分为五个步骤:
编译总共为五个部分
1.设置编译环境 set compile environment
2.获取要编译的源文件,以及把源文件转换为目标文件 ( 源文件和目标文件) source to obj
3.将文件编译为目标文件 OBJing
4.将目标文件链接成可执行文件或(打包为)动态库,或静态库 linking
5.其他方面 clean等
下面给出一个简单的makefile模板(实际项目中可依照此模板进行扩展):
来看看这个模板:
1 ## 设置编译环境
2 CC:=gcc
3 CXX:=g++
4 BIN:= libdemo.so
5 FLAGS := -Wall -g -fPIC
6 CXX_FLAGS := -Wall -g -pipe -fPIC -shared -export-dynamic
7 LIB := -L../common/test/ -ltest
8 INCLUDE_PATH := -I/common/ -I../common/test/
9
10 ## 获取要编译的源文件,以及把源文件转换为目标文件
11 SOURCES := $(wildcard *.c *.cpp)
12 OBJS := $(patsubst %.c, %.o, $(patsubst %.cpp,%.o,$(SOURCES)) )
13
14 ## 将源文件编译为目标文件
15 %.o: %.c
16 $(CC) $(FLAGS) -c $< -o $@ $(INCLUDE_PATH)
17
18 %.o:%.cpp
19 $(CXX) $(FLAGS) -c $< -o $@ $(INCLUDE_PATH)
20
21 ## 将目标文件链接成可执行文件或动态库,或静态库
22 $(BIN) : $(OBJS)
23 $(CXX) $(CXX_FLAGS) $(OBJS) $(INCLUDE_PATH) $(LIB) -o $(BIN)
24 chmod a+x $(BIN)
25
26 ## 其他
27 clean:
28 rm -rf *.o $(BIN)
29
30 install:
31 cp $(BIN) ../common/bin
当然,makefile的入门还是推荐陈皓老师的<<跟我一起写makefile>>,希望对大家有所帮助.