linux makefile

ROOT_PATH = $(shell cd ../../; pwd)

##Set project directory
SRC_PATH = $(ROOT_PATH)/src
OUTPUT_PATH = $(ROOT_PATH)/bin/linux
TMPOBJ_PATH = $(ROOT_PATH)/bin/linux/objs

INC_PATH = $(ROOT_PATH)/libs/include
LIB_PATH = $(ROOT_PATH)/libs

$(warning SRC_PATH $(SRC_PATH))
$(warning OUTPUT_PATH $(OUTPUT_PATH))
$(warning TMPOBJ_PATH $(TMPOBJ_PATH))
$(warning INC_PATH $(INC_PATH))
$(warning LIB_PATH $(LIB_PATH))

INCLUDE_PATHS:=
BUILD_FILES:= 

BUILD_PATH := $(SRC_PATH)/osal
include $(SRC_PATH)/osal/Linux.mk
BUILD_FILES += $(LOCAL_SRC_FILES)
INCLUDE_PATHS +=$(LOCAL_C_INCLUDES)

BUILD_PATH := $(SRC_PATH)/utils
include $(SRC_PATH)/utils/Linux.mk
BUILD_FILES += $(LOCAL_SRC_FILES)
INCLUDE_PATHS +=$(LOCAL_C_INCLUDES)

BUILD_PATH := $(SRC_PATH)/com
include $(SRC_PATH)/com/Linux.mk
BUILD_FILES +=$(LOCAL_SRC_FILES)
INCLUDE_PATHS +=$(LOCAL_C_INCLUDES)

BUILD_PATH = $(SRC_PATH)/upnp
include $(SRC_PATH)/upnp/Linux.mk
BUILD_FILES +=$(LOCAL_SRC_FILES)
INCLUDE_PATHS +=$(LOCAL_C_INCLUDES)

INCLUDE_PATHS := $(addprefix -I,$(INCLUDE_PATHS))

#Custom Predefines
CFLAGS += -D_DEBUG

##Dependent header files
CFLAGS += -I. \
		-I$(SRC_PATH) \
		$(INCLUDE_PATHS)



##Set compiler
CFLAGS += -fPIC
		 #-Wall 
		 # -std=c++98
		 #-pedantic-errors \
		 #-Werror
		 #-g
	  

##Dependent libraries
LDFLAGS += -shared -fPIC -lm -lpthread -lrt -ldl


CPP_SOURCES = $(filter %.cpp,$(BUILD_FILES))
CPP_OBJFILES = $(patsubst %.cpp,$(TMPOBJ_PATH)/%.o,$(notdir $(CPP_SOURCES)))

#$(warning CPP_SOURCE: $(CPP_SOURCES))
#$(warning CPP_OBJFILES: $(CPP_OBJFILES))

C_SOURCES = $(filter %.c,$(BUILD_FILES))
C_OBJFILES = $(patsubst %.c,$(TMPOBJ_PATH)/%.o,$(notdir $(C_SOURCES)))

#$(warning C_SOURCE: $(C_SOURCES))
#$(warning C_OBJFILES: $(C_OBJFILES))


#Set vpath where to find these types of files
vpath %.cpp $(dir $(CPP_SOURCES))
vpath %.c $(dir $(C_SOURCES))
vpath %.o $(TMPOBJ_PATH)

#Set target output path and the path of intermidiate object 
TARGET = $(OUTPUT_PATH)/txic
TARGET_LIB = $(OUTPUT_PATH)/libtxcore.so
#The first target to be executed
all: target

target: $(TARGET_LIB)

#Static dependecy pattern
$(C_OBJFILES): $(TMPOBJ_PATH)/%.o: %.c
	-mkdir -p $(TMPOBJ_PATH)
	$(CC) -c $(CFLAGS) -o $@ $<

$(CPP_OBJFILES): $(TMPOBJ_PATH)/%.o: %.cpp
	-mkdir -p $(TMPOBJ_PATH)
	$(CXX) -c $(CFLAGS) -o $@ $<

$(TARGET): $(CPP_OBJFILES) $(C_OBJFILES)
	-mkdir -p $(OUTPUT_PATH)
	$(CXX) -o $@ $^ $(LDFLAGS)

$(TARGET_LIB): $(CPP_OBJFILES) $(C_OBJFILES)
	-mkdir -p $(OUTPUT_PATH)
	$(CXX) $(LDFLAGS) -o $(TARGET_LIB) $(C_OBJFILES) $(CPP_OBJFILES)

clean:
	-rm -rf $(TMPOBJ_PATH)
	-rm -f $(TARGET_LIB)



$(SRC_PATH)/utils/Linux.mk

PRJ_SRC_FILES:= \
	Buffer.cpp \
        ...................... \
        String.cpp 

LOCAL_SRC_FILES = $(addprefix $(BUILD_PATH)/,$(PRJ_SRC_FILES))




ROOT_PATH = $(shell cd ./; pwd)

##Set project directory
SRC_PATH = $(ROOT_PATH)/src
OUTPUT_PATH = $(ROOT_PATH)/bin
TMPOBJ_PATH = $(ROOT_PATH)/bin/objs

INC_PATH = $(ROOT_PATH)/include
LIB_PATH = $(ROOT_PATH)/libs

$(warning SRC_PATH $(SRC_PATH))
$(warning OUTPUT_PATH $(OUTPUT_PATH))
$(warning TMPOBJ_PATH $(TMPOBJ_PATH))
$(warning INC_PATH $(INC_PATH))
$(warning LIB_PATH $(LIB_PATH))


#Custom Predefines
CFLAGS += -D_DEBUG

##Dependent header files
CFLAGS += -I. \
		-I$(SRC_PATH) \
		-I$(INC_PATH) \
		-I$(INC_PATH)/osal \
		-I$(INC_PATH)/utils \
		-I$(INC_PATH)/com \
		-I$(INC_PATH)/upnp


##Set compiler
CFLAGS +=
		 #-Wall 
		 #-pedantic-errors \
		 #-Werror
		 #-g
	  

##Dependent libraries
LDFLAGS += -ltxcore -lm -lpthread -lrt -ldl


#Find all src dir from SRC_PATH and sub dir in FIND_LAYER
FIND_LAYER = 2
PRJ_SRCDIR := $(shell find $(SRC_PATH) -maxdepth $(FIND_LAYER) -type d)
PRJ_SRCDIR := $(basename $(patsubst ./%,%,$(PRJ_SRCDIR)))
PRJ_SRCDIR := $(filter-out $(EXCLUDE_PATH),$(PRJ_SRCDIR))


#CPP Source files
CPP_SOURCES = $(foreach d,$(PRJ_SRCDIR),$(wildcard $(d)/*.cpp) )
CPP_OBJFILES = $(patsubst %.cpp,$(TMPOBJ_PATH)/%.o,$(notdir $(CPP_SOURCES)))

#C Source files
C_SOURCES := $(foreach d,$(PRJ_SRCDIR),$(wildcard $(d)/*.c) ) 
C_OBJFILES := $(patsubst %.c,$(TMPOBJ_PATH)/%.o,$(notdir $(C_SOURCES)))

#Set vpath where to find these types of files
vpath %.cpp $(dir $(CPP_SOURCES))
vpath %.c $(dir $(C_SOURCES))
vpath %.o $(TMPOBJ_PATH)

#Set target output path and the path of intermidiate object 
TARGET = $(OUTPUT_PATH)/txic
#The first target to be executed
all: target

target: $(TARGET)

#Static dependecy pattern
$(C_OBJFILES): $(TMPOBJ_PATH)/%.o: %.c
	-mkdir -p $(TMPOBJ_PATH)
	$(CC) -c $(CFLAGS) -o $@ $<

$(CPP_OBJFILES): $(TMPOBJ_PATH)/%.o: %.cpp
	-mkdir -p $(TMPOBJ_PATH)
	$(CXX) -c $(CFLAGS) -o $@ $<

$(TARGET): $(CPP_OBJFILES) $(C_OBJFILES)
	-mkdir -p $(OUTPUT_PATH)
	$(CXX) -o $@ $^ -L./ -L$(LIB_PATH) $(LDFLAGS)

clean:
	-rm -rf $(TMPOBJ_PATH)
	-rm -f $(TARGET)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白錵錵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值