Makefile模板

一个文件夹

######################################
#
######################################
#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)  

你可能感兴趣的:(linux,arm开发)