一个文件夹
######################################
#
######################################
#source file
#源文件,自动找所有.c和.cpp文件,并将目标定义为同名.o文件
SOURCE := $(wildcard *.c) $(wildcard *.cpp)
OBJS := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE)))
#target you can change test to what you want
#目标文件名,输入任意你想要的执行文件名
TARGET := testTLY
#compile and lib parameter
#编译参数
CC := arm-himix200-linux-g++
LIBS :=
LDFLAGS :=
DEFINES :=
INCLUDE := -I.
CFLAGS := -g -Wall -O3 $(DEFINES) $(INCLUDE)
CXXFLAGS:= $(CFLAGS) -DHAVE_CONFIG_H
#i think you should do anything here
#下面的基本上不需要做任何改动了
.PHONY : everything objs clean veryclean rebuild
everything : $(TARGET)
all : $(TARGET)
objs : $(OBJS)
rebuild: veryclean everything
clean :
rm -fr *.so
rm -fr *.o
veryclean : clean
rm -fr $(TARGET)
$(TARGET) : $(OBJS)
$(CC) $(CXXFLAGS) -o $@ $(OBJS) $(LDFLAGS) $(LIBS)
$(OBJS) : %.o : %.cpp
$(CC) -c $(CXXFLAGS) $< -o $@ $(INCLUDE_DIRS)
两级Makefile,一个主剩下的分别是c++和c的
#!/bin/sh
ARCH= arm-hisiv500-linux-
CC=gcc
CCpp=g++
TOP_DIR :=$(PWD)
OBJ_DIR :=./project/
OUT_DIR :=$(TOP_DIR)/output
SUB_DIRC++ :=$(TOP_DIR)/src/c++
SUB_DIRC :=$(TOP_DIR)/src/c
INC_DIR :=./include
LIB_DIR :=./lib/
AR = ar
CFLAGS = -g
SENSOR0_TYPE ?= SMART_SC2210_MIPI_3M_30FPS_12BIT
SENSOR1_TYPE ?= SMART_SC2210_MIPI_3M_30FPS_12BIT
CFLAGS += -DSENSOR0_TYPE=$(SENSOR0_TYPE)
CFLAGS += -DSENSOR1_TYPE=$(SENSOR1_TYPE)
export SUB_DIRC SUB_DIRC++ OBJ_DIR TOP_DIR INC_DIR LIB_DIR ARCH AR CFLAGS CCpp CC
TARGET:=717NVR
all:CHECKDIR $(SUB_DIRC++) $(SUB_DIRC) $(TARGET)
#o文件写这里 因为依赖顺序的原因只能手写
OBJFILE :=$(patsubst %.c,%.o,$(wildcard $(SUB_DIRC)/*.c))
OBJFILE +=$(patsubst %.cpp,%.o,$(wildcard $(SUB_DIRC++)/*.cpp))
#a库文件写这里 因为依赖顺序的原因只能手写
LIBFILE :=-L./$(LIB_DIR) -lmpi -lhdmi -lVoiceEngine -lupvqe -ldnvqe -ljpeg6b\
-lliveMedia -lBasicUsageEnvironment -lgroupsock -lUsageEnvironment -lstdc++
CHECKDIR:
@echo $(OBJFILE)
mkdir -p $(OBJ_DIR) $(OBJ_DIR)
$(SUB_DIRC++):ECHO
@echo start complier $(SUB_DIRC++)
make -C $@
$(SUB_DIRC):ECHO
@echo start complier $(SUB_DIRC)
make -C $@
$(TARGET):ECHO
@echo start complier $(OBJFILE)
$(ARCH)$(CCpp) -g -o $@ $(OBJFILE) $(LIBFILE) -lpthread -ldl -lrt -lm -lpthread
cp $@ ~/cbShare
ECHO:
clean:
rm -rf ./project/*.o
rm -rf ./src/c++/*.o
rm -rf ./src/c/*.o
#TOP_DIR 指定顶层目录, LIB_DIR指定静态库文件位置,INCLUDE_DIRS指定了receiver.cpp需要Include的头文件。
#TARGET 指定生成为一个静态链接库文件。 命名规则必须为 libXXX.a的形式。
SOURCES = $(wildcard ./*.c ./*.cpp)
INCLUDE_DIRS =-I$(TOP_DIR)/include/include -I$(TOP_DIR)/include/hiSys -I$(TOP_DIR)/include/liveMedia -I$(TOP_DIR)/include/UsageEnvironment \
-I$(TOP_DIR)/include/groupsock -I$(TOP_DIR)/include/BasicUsageEnvironment
CFLAGS_Cpp = -g
#-D__STDC_FORMAT_MACROS -g
TARGET = cb_lib.a
OBJECTS = $(patsubst %.cpp,%.o,$(SOURCES))
all:$(TARGET)
$(TARGET) : $(OBJECTS)
cp *.o ../../project/
# 只能复制,移动会造成每次都重新编译
$(OBJECTS) : %.o : %.cpp
$(ARCH)$(CCpp) -c $(CFLAGS_Cpp) $< -o $@ $(INCLUDE_DIRS)
.PHONY : clean
clean:
rm -rf $(TARGET) $(OBJECTS)
#TOP_DIR 指定顶层目录, LIB_DIR指定静态库文件位置,INCLUDE_DIRS指定了receiver.cpp需要Include的头文件。
#TARGET 指定生成为一个静态链接库文件。 命名规则必须为 libXXX.a的形式。
SOURCES = $(wildcard ./*.c ./*.cpp)
INCLUDE_DIRS =-I$(TOP_DIR)/include/include -I$(TOP_DIR)/include/hiSys
TARGET = cb_lib.a
OBJECTS = $(patsubst %.c,%.o,$(SOURCES))
all:$(TARGET)
$(TARGET) : $(OBJECTS)
cp *.o ../../project/
# 只能复制,移动会造成每次都重新编译
$(OBJECTS) : %.o : %.c
$(ARCH)$(CC) -c $(CFLAGS) -w $< -o $@ $(INCLUDE_DIRS)
.PHONY : clean
clean:
rm -rf $(TARGET) $(OBJECTS)
可通过Makefile创建一个带时间的头文件来实现
echo "#define VER \""`date +"%Y%m%d%H%M%S"`"\"">./include/include/ver.h