一个简单的makefile分析

makefile example:


# ----------------------------------------------

# commands
# ----------------------------------------------
C++     := g++
CFLAGS  := -m64 -c
LINK    := g++
LFLAGS  := -m64 -pthread -o
LIBFLAGS := -Wl,-rpath,./ -Wl,--no-as-needed -lrt


# ----------------------------------------------
# directories
# ----------------------------------------------
OBJ_DIR := Obj
TARGET_DIR := Out
INC_DIR := \
xxx/Inc \
platform/Inc
SRC_DIR := \
xxx/Src
# ----------------------------------------------
# files
# ----------------------------------------------
TARGET  := $(TARGET_DIR)/xxx
SRCS := $(wildcard $(SRC_DIR)/*.cpp)
INCS := $(addprefix -I , $(INC_DIR))
OBJS := $(patsubst $(SRC_DIR)/%.cpp, $(OBJ_DIR)/%.o, $(SRCS))
LIBS := \
platform/Lib/xxx1.so \
platform/Lib/xxx2.so \
platform/Lib/xxx3.so


# ----------------------------------------------
# make
# ----------------------------------------------


.PHONY: new r clean copy prepare ok


new: clean r copy


r: prepare $(TARGET) ok


$(TARGET): $(OBJS) $(LIBS)
$(LINK) $(LFLAGS) $(TARGET) $(OBJS) $(LIBS) $(LIBFLAGS)
$(OBJS): $(OBJ_DIR)/%.o:$(SRC_DIR)/%.cpp
$(C++) $(CFLAGS) $(INCS) $< -o $@

prepare:
@-mkdir $(OBJ_DIR)
@-mkdir $(TARGET_DIR)


clean:
@-rm -rf $(OBJ_DIR)
@-rm -rf $(TARGET_DIR)


copy:
@cp $(LIBS) $(TARGET_DIR)
@chmod +x $(TARGET)
    
ok:
@echo =======================
@echo ------ Success --------

@echo =======================


===================================================================

SRCS := $(wildcard $(SRC_DIR)/*.cpp) 获取SRC_DIR目录下的所有.cpp文件列表

INCS := $(addprefix -I , $(INC_DIR)) 添加 “-I ”前缀到 目录路径前

$(patsubst $(SRC_DIR)/%.cpp, $(OBJ_DIR)/%.o, $(SRCS)) 使用wildcard函数获取工作目录下的.cpp文件列表,之后将列表中的所有文件后缀.cpp换成.o

$< 第一个依赖文件

$@ 目标文件

$^ 所有的依赖文件


$(OBJ_DIR)/%.o:$(SRC_DIR)/%.cpp
$(C++) $(CFLAGS) $(INCS) $< -o $@

把所有的.cpp文件编译成.o文件


run result:

make
g++ -m64 -c -I xxx/Inc -I platform/Inc xxx/Src/xxx_source1.cpp -o Obj/xxx_source1.o
g++ -m64 -c -I xxx/Inc -I platform/Inc xxx/Src/xxx_source2.cpp -o Obj/xxx_source2.o
g++ -m64 -c -I xxx/Inc -I platform/Inc xxx/Src/xxx_source3.cpp -o Obj/xxx_source3.o
g++ -m64 -c -I xxx/Inc -I platform/Inc xxx/Src/xxx_source4.cpp -o Obj/xxx_source4.o
g++ -m64 -c -I xxx/Inc -I platform/Inc xxx/Src/xxx_source5.cpp -o Obj/xxx_source5.o
g++ -m64 -pthread -o Out/xxx  Obj/xxx_source1.o  Obj/xxx_source2.o  Obj/xxx_source3.o  Obj/xxx_source4.o  Obj/xxx_source5.o platform/Lib/xxx1.so platform/Lib/xxx2.so platform/Lib/xxx3.so -Wl,-rpath,./ -Wl,--no-as-needed -lrt
=======================
------ Success --------
=======================


reference:

1.http://blog.csdn.net/liangkaiming/article/details/6267357

2.http://blog.csdn.net/runfarther/article/details/50039023

3.http://blog.csdn.net/windowslearner/article/details/8562901


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值