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