linux Makefile编写的整理

时间:2021-03-08 07:28:32

最近将Makefile的编写进行了整理和提炼了一下,大致分为五个步骤:

编译总共为五个部分
 1.设置编译环境 set compile environment
 2.获取要编译的源文件,以及把源文件转换为目标文件 ( 源文件和目标文件) source to obj
 3.将文件编译为目标文件 OBJing
 4.将目标文件链接成可执行文件或(打包为)动态库,或静态库  linking
 5.其他方面 clean等

下面给出一个简单的makefile模板(实际项目中可依照此模板进行扩展):

来看看这个模板:

 ## 设置编译环境
CC:=gcc
CXX:=g++
BIN:= libdemo.so
FLAGS             := -Wall -g -fPIC
CXX_FLAGS     := -Wall -g -pipe -fPIC -shared -export-dynamic
LIB                   := -L../common/test/ -ltest
INCLUDE_PATH    := -I/common/ -I../common/test/  ## 获取要编译的源文件,以及把源文件转换为目标文件
SOURCES            := $(wildcard *.c *.cpp)
OBJS             := $(patsubst %.c, %.o, $(patsubst %.cpp,%.o,$(SOURCES)) ) ## 将源文件编译为目标文件
%.o: %.c
    $(CC) $(FLAGS) -c $< -o $@ $(INCLUDE_PATH) %.o:%.cpp
    $(CXX) $(FLAGS) -c $< -o $@ $(INCLUDE_PATH) ## 将目标文件链接成可执行文件或动态库,或静态库
$(BIN) : $(OBJS) 
    $(CXX) $(CXX_FLAGS) $(OBJS) $(INCLUDE_PATH) $(LIB) -o $(BIN)
    chmod a+x $(BIN) ## 其他
clean:
    rm -rf *.o $(BIN)
      
install:
    cp $(BIN) ../common/bin

当然,makefile的入门还是推荐陈皓老师的<<跟我一起写makefile>>,希望对大家有所帮助.