项目通用Makefile

Posted itpoorman

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了项目通用Makefile相关的知识,希望对你有一定的参考价值。

.PHONY: all clean

OBJ             = obj
BIN             = bin
LIB             = lib
SRC             = src

GCC             = g++
FLAGS           = -Wall -g
DEFINES         = -DLINUX

# 头文件目录
INCLUDES        = $(patsubst %,-I%, /usr/include /szmetro/download/p2p-c++/p2p-ice/src)

# 库文件目录
SYSLIBDIR       = /usr/local/lib
P2PLIB          = /szmetro/download/p2p-c++/p2p-ice/bin
LIBDIRS         = $(patsubst %,-L%, $(LIB) $(SYSLIBDIR) $(P2PLIB))

# 库文件
ICELIB          = Ice IceUtil p2p-ice
LIBS            = $(patsubst %,-l%, $(ICELIB))

# 默认递归3级目录, 不编译的文件请添加到DISCARD
DISCARD         = $(wildcard $(SRC)/test/*.cpp)
OBJS            = $(patsubst $(SRC)/%.cpp,$(OBJ)/%.o, $(filter-out $(DISCARD), $(shell find $(SRC)/* -maxdepth 3 -type f -regex ".*.cpp")))
OBJDIRS         = $(sort $(patsubst $(SRC)/%,$(OBJ)/%, $(dir $(OBJS))))

# 可执行文件名
EXEC            = $(BIN)/p2p-client

all: MKDIR $(EXEC)

MKDIR:
	mkdir $(OBJDIRS) -p
    
$(EXEC): $(OBJS)
	$(GCC) $(OBJS) -o [email protected] $(LIBDIRS) $(LIBS)

# Makefile默认目标
$(OBJ)/%.o: $(SRC)/%.cpp
	$(GCC) $(INCLUDES) $(DEFINES) $(FLAGS) -c $^ -o [email protected]

clean:
	rm -fr $(OBJ)/*
	rm -f $(EXEC)

  目录结构如:

.
|-- bin
|-- lib
|-- Makefile
|-- obj
`-- src

  

以上是关于项目通用Makefile的主要内容,如果未能解决你的问题,请参考以下文章

项目通用Makefile

Eclipse 中的通用代码片段或模板

Makefile编写

MakeFile的通用版本写法

Android 逆向Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(代码片段

Makefile通用模板