📄 makefile
字号:
#
#/****************License************************************************
# *
# * Copyright 2000-2003. ScanSoft, Inc.
# *
# * Use of this software is subject to notices and obligations set forth
# * in the SpeechWorks Public License - Software Version 1.2 which is
# * included with this software.
# *
# * ScanSoft is a registered trademark of ScanSoft, Inc., and OpenSpeech,
# * SpeechWorks and the SpeechWorks logo are registered trademarks or
# * trademarks of SpeechWorks International, Inc. in the United States
# * and other countries.
# *
# ***********************************************************************/
#
#--------------------------------
# Required Environment Variables
#--------------------------------
SHELL = /bin/sh
PRODUCT_LIB_PREFIX=SB
ifndef SWISBSDK
$(error The environment variable SWISBSDK is not defined (it should point to your baseline directory))
endif
#--------------------
# Platform macros
#--------------------
PROJ_ROOT = ..
CPU = i386
OS = linux
PLATFORM = $(CPU)-$(OS)
MAKE_CPU = $(CPU)
MAKE_OS = $(OS)
PERL = $(shell which perl)
MAKEFILE = Makefile
CC = gcc
CXX = g++
#-----------------------------------------
# Set up macros for different config's
#-----------------------------------------
ifndef CFG
CFG = debug
endif
ifeq ("$(CFG)","debug")
CFG_SUFFIX = D
CFLAGS_CFG = $(CFLAGS_DEBUG)
else
ifeq ("$(CFG)","release")
CFG_SUFFIX =
CFLAGS_CFG = $(CFLAGS_RELEASE)
else
$(error CFG is not a legal type - should be debug or release)
endif
endif
#---------------------
# Directories
#---------------------
PWD := $(shell pwd)
BUILD_ROOT := build
BUILD_ROOT_PLT = $(BUILD_ROOT)/$(PLATFORM)
BUILDDIR = $(BUILD_ROOT_PLT)/$(CFG)
PLATFORMDIR = $(PROJ_ROOT)/$(PLATFORM)
SRCPATH = $(PLATFORMDIR)/src
#
# SWISBSDK Install Directories
#
bindir = $(SWISBSDK)/bin
libdir = $(SWISBSDK)/lib
incdir = $(SWISBSDK)/include
#
# Build Area directories
#
buildbindir = $(BUILDDIR)/bin
buildlibdir = $(BUILDDIR)/lib
#------------------------
# C/C++ compiler flags
#------------------------
CC = gcc
CXX = g++
CFLAGS_GENERAL = -D_$(CPU)_ \
-D_$(OS)_ \
-I$(PROJ_ROOT)/$(PLATFORM)/include \
-I$(PROJ_ROOT)/include \
-I$(SWISBSDK)/include \
-I./include \
-I./ \
-D_SIMPLE_R \
-D_REENTRANT \
-D_GNU_SOURCE \
-D__THREADED
ANSIFLAGS = -pedantic \
-Wall \
-Wcast-qual \
-Wcast-align \
-Wmissing-prototypes \
-Wstrict-prototypes \
-Wtraditional
C_ANSIFLAGS = $(ANSIFLAGS) \
-Wid-clash-31
CXX_ANSIFLAGS = $(ANSIFLAGS)
ifdef STRICT
CFLAGS_GENERAL += $(ANSIFLAGS)
endif
# -g debug symbols
# -O0 No Optimization for debug
# -fPIC Generate Position Independant code
CFLAGS_DEBUG = -g -O0 -fPIC
# -s strip symbols
# -O2 Optimize for release
# -fPIC Generate Position Independant code
CFLAGS_RELEASE = -DNDEBUG -s -O2 -fPIC
#----------------------------------------
# Link Flags
#----------------------------------------
LDFLAGS += -L$(buildlibdir) $(PROJ_LDFLAGS) $($(TARGET)_LDFLAGS) $(LDFLAGS_$(OS)) -L$(SWISBSDK)/lib
LDFLAGS_SHARED = -shared
LDLIBS += $($(TARGET)_LDLIBS)
ifdef STATIC
LDLIBS += $($(TARGET)_LDLIBS_STATIC)
endif
LDLIBS += -lstdc++ -lpthread -ldl
LDFLAGS += -Wl,-rpath-link=$(SWISBSDK)/lib:$(PROJ_RPATH_LINK)
#--------------------------------
# General Programs
#--------------------------------
CHMOD = chmod
CHMODFLAGS = go-w,a-x
CHMODFLAGSX = go-w,a+x
INSTALL = cp -p
INSTALL_PROGRAM = $(INSTALL)
INSTALL_DATA = $(INSTALL)
MKDIRS = ../VXIinterfaces/mkinstalldirs
RMDIR = rmdir
RMCLEAN = rm -rf
#-------------------------------------------
# Final Values
#-------------------------------------------
CFLAGS = $(CFLAGS_CFG) $(CFLAGS_GENERAL) $(MYCFLAGS)
CXXFLAGS = $(CFLAGS_CFG) $(CFLAGS_GENERAL) $(MYCFLAGS)
CPPFLAGS = $(PROJ_CFLAGS) $(CFLAGS_$(OS)) $($(TARGET)_CFLAGS)
PROJ_CFLAGS = \
-DCOMPANY_DOMAIN=L\"com.speechworks\" \
-DMODULE_PREFIX=L\"swi:\"
#============================================================================
# Build sources
#============================================================================
PUBLIC_HEADERS = \
SBcache.h \
OSBcache.h
PUBLIC_ERROR_FILES = \
SBcacheErrors.xml \
SBcacheDiagnostics.xml
# Mask the exports of shared objects by explicitly listing public functions
EXPLICIT_VER_FILES = 1
# Set defaults for the library version and product name burnt into
# shared libraries
LIBVER = 3
# Define libaries to be build
LIBS = $(PRODUCT_LIB_PREFIX)cache
# Define library sources
$(PRODUCT_LIB_PREFIX)cache_SRC = \
md5.cpp \
base64.cpp \
SBcacheMisc.cpp \
SBcacheEntry.cpp \
SBcacheManager.cpp \
SBcache.cpp \
SBinetLogger.cpp
# Define any linked libraries
$(PRODUCT_LIB_PREFIX)cache_LDLIBS = \
-lVXIvalue$(CFG_SUFFIX) \
-l$(PRODUCT_LIB_PREFIX)trd$(CFG_SUFFIX) \
-l$(PRODUCT_LIB_PREFIX)trdUtil$(CFG_SUFFIX)
# Define version file
$(PRODUCT_LIB_PREFIX)cache_VER = SBcache.ver
#============================================================================
# Build Rules
#============================================================================
all_SRC := $(sort $(foreach target, $(PROGS) $(STATIC_LIBS) $(LIBS), $($(target)_SRC)))
progsubdirs := $(sort ./ $(foreach target, $(PROGS), $(dir $($(target)_SRC))))
libsubdirs := $(sort ./ $(foreach target, $(STATIC_LIBS) $(LIBS), $(dir $($(target)_SRC))))
#-------------------------------------------------
# Header file and Include Directories
#-------------------------------------------------
vpath lib%.a $(patsubst -L%, %, $(filter -L%, $(LDFLAGS))) \
$(subst :, , $(LD_LIBRARY_PATH)) $(STD_LIBRARY_PATH)
ifneq ($(SRCPATH),)
vpath %.c $(SRCPATH)
vpath %.cc $(SRCPATH)
vpath %.cpp $(SRCPATH)
vpath %.C $(SRCPATH)
vpath %.def $(SRCPATH)
vpath %.f $(SRCPATH)
vpath %.F $(SRCPATH)
vpath %.l $(SRCPATH)
vpath %.mod $(SRCPATH)
vpath %.p $(SRCPATH)
vpath %.r $(SRCPATH)
vpath %.s $(SRCPATH)
vpath %.sh $(SRCPATH)
vpath %.y $(SRCPATH)
endif
#--------------------------------------------------
# Default all target as all-shared
#--------------------------------------------------
all: all-shared
#--------------------------------------------------
# .PHONY target declares all possible rules
#--------------------------------------------------
.PHONY: $(PROGS) $(STATIC_LIBS) $(LIBS) \
$(addsuffix -shared, $(STATIC_LIBS) $(LIBS)) \
$(addsuffix -static, $(STATIC_LIBS) $(LIBS)) \
$(addsuffix -install, $(STATIC_LIBS) $(LIBS) $(PROGS)) \
$(addsuffix -install-static, $(STATIC_LIBS) $(LIBS)) \
$(addsuffix -install-shared, $(STATIC_LIBS) $(LIBS)) \
$(addsuffix -install-progs, $(PROGS)) \
$(buildbindir)/installprogsubdirs $(buildlibdir)/installlibsubdirs \
installbuildbindir installbuildlibdir \
installbindir installlibdir \
all progs libs-static libs-shared \
all-libs all-static all-shared \
all-install headers clean
all-static: $(addsuffix -install-static, $(STATIC_LIBS) $(LIBS)) \
$(addsuffix -install, $(PROGS))
all-shared: $(addsuffix -install-static, $(STATIC_LIBS)) \
$(addsuffix -install-shared, $(LIBS)) \
$(addsuffix -install, $(PROGS))
progs: $(addsuffix -progs, $(PROGS))
libs: libs-static libs-shared
libs-static: $(addsuffix -static, $(STATIC_LIBS) $(LIBS))
libs-shared: $(addsuffix -static, $(STATIC_LIBS)) $(addsuffix -shared, $(LIBS))
#---------------------------------------------------------------------------
# headers copies all the public headers and scripts to the build area
# (normally automatically done when a library, DLL, or program is
# successfully build)
#---------------------------------------------------------------------------
headers: installincdir
ifneq ($(PUBLIC_HEADERS),)
$(INSTALL) $(PUBLIC_HEADERS) $(incdir)
endif
ifneq ($(PUBLIC_HEADER_TREES),)
$(INSTALL) -r $(PUBLIC_HEADER_TREES) "$(SWISBSDK)/include"
endif
ifneq ($(PUBLIC_SCRIPTS),)
$(INSTALL) $(PUBLIC_SCRIPTS) "$(SWISBSDK)/bin"
endif
ifneq ($(PUBLIC_CONFIG_FILES),)
$(INSTALL) $(PUBLIC_CONFIG_FILES) "$(SWISBSDK)/config"
endif
ifneq ($(PUBLIC_ERROR_FILES),)
$(INSTALL) $(PUBLIC_ERROR_FILES) "$(SWISBSDK)/config"
endif
#---------------------------------------------------------------------
# clean deletes the entire directory tree for the current build config
#---------------------------------------------------------------------
clean: $(PROJ_CLEAN)
$(RMCLEAN) $(BUILDDIR)
@echo Cleaning up $(BUILDDIR)
#--------------------------------------------
# Rules to create (install) build subdirs
#--------------------------------------------
$(buildbindir)/installbinsubdirs:
$(MKDIRS) $(addprefix $(dir $@), $(progsubdirs))
-$(CHMOD) $(CHMODFLAGSX) $(addprefix $(dir $@), $(progsubdirs))
$(buildlibdir)/installlibsubdirs:
$(MKDIRS) $(addprefix $(dir $@), $(libsubdirs))
-$(CHMOD) $(CHMODFLAGSX) $(addprefix $(dir $@), $(libsubdirs))
installbuildbindir:
$(MKDIRS) $(buildbindir)
-$(CHMOD) $(CHMODFLAGSX) $(buildbindir)
installbuildlibdir:
$(MKDIRS) $(buildlibdir)
-$(CHMOD) $(CHMODFLAGSX) $(buildlibdir)
installbindir:
$(MKDIRS) $(bindir)
-$(CHMOD) $(CHMODFLAGSX) $(bindir)
installlibdir:
$(MKDIRS) $(libdir)
-$(CHMOD) $(CHMODFLAGSX) $(libdir)
installincdir:
$(MKDIRS) $(incdir)
-$(CHMOD) $(CHMODFLAGSX) $(incdir)
#-----------------------------------------------
# Targets
#-----------------------------------------------
$(addsuffix -install, $(PROGS)): %-install: installbindir %-progs
$(RM) $(bindir)/$*$(CFG_SUFFIX)
$(INSTALL_PROGRAM) $(buildbindir)/$*$(CFG_SUFFIX) $(bindir)
$(addsuffix -install, $(STATIC_LIBS) $(LIBS)): %-install: %-install-static %-install-shared
$(addsuffix -install-static, $(STATIC_LIBS) $(LIBS)): %-install-static: installlibdir \
%-static headers
$(RM) $(libdir)/lib$*$(CFG_SUFFIX).a
$(INSTALL_DATA) $(buildlibdir)/lib$*$(CFG_SUFFIX).a $(libdir)
$(addsuffix -install-shared, $(LIBS)): %-install-shared: installlibdir \
%-shared headers
$(RM) $(libdir)/lib$*$(CFG_SUFFIX).so.$(LIBVER)
$(INSTALL_DATA) $(buildlibdir)/lib$*$(CFG_SUFFIX).so.$(LIBVER) $(libdir)
$(RM) $(libdir)/lib$*$(CFG_SUFFIX).so
ln -s lib$*$(CFG_SUFFIX).so.$(LIBVER) $(libdir)/lib$*$(CFG_SUFFIX).so
#-------------------------------------------
# Program Targets
#--------------------------------------------
$(PROGS): %: %-progs
$(addsuffix -progs, $(PROGS)): %-progs: installbuildbindir \
$(buildbindir)/installbinsubdirs
$(MAKE) -f $(MAKEFILE) $(buildbindir)/$*$(CFG_SUFFIX) TARGET=$* \
DEPS=$*_SRC
#--------------------------------------------
# Library Targets
#--------------------------------------------
$(STATIC_LIBS): %: %-static %-shared
$(LIBS): %: %-static %-shared
$(addsuffix -static, $(STATIC_LIBS) $(LIBS)): %-static: installbuildlibdir \
$(buildlibdir)/installlibsubdirs
$(MAKE) -f $(MAKEFILE) $(buildlibdir)/lib$*$(CFG_SUFFIX).a TARGET=$* \
DEPS=$*_SRC
LDEXPORTS =
ifdef EXPLICIT_VER_FILES
LDEXPORTS = --version-script $($(TARGET)_VER)
endif
ifndef BUILDING_STUB_SO
LDFOLLOWLINKS = -Wl,-h,$(notdir $@).$(LIBVER)
endif
LDFLAGS_SHARED += $(LDEXPORTS) $(LDFOLLOWLINKS)
$(addsuffix -shared, $(LIBS)): %-shared: installbuildlibdir \
$(buildlibdir)/installlibsubdirs
$(MAKE) -f $(MAKEFILE) $(buildlibdir)/lib$*$(CFG_SUFFIX).so TARGET=$* \
DEPS=$*_SRC
#-----------------------------------------
# Recursive rules
#------------------------------------------
$(addprefix $(buildbindir)/, $(addsuffix $(CFG_SUFFIX), $(PROGS))): \
$(addprefix $(buildbindir)/, \
$(patsubst %.s, %$(CFG_SUFFIX).o, $(filter %.s, $($(DEPS)))) \
$(patsubst %.c, %$(CFG_SUFFIX).o, $(filter %.c, $($(DEPS)))) \
$(patsubst %.cc, %$(CFG_SUFFIX).o, $(filter %.cc, $($(DEPS)))) \
$(patsubst %.cpp, %$(CFG_SUFFIX).o, $(filter %.cpp, $($(DEPS)))) \
$(patsubst %.C, %$(CFG_SUFFIX).o, $(filter %.C, $($(DEPS)))))
$(LINK.cc) $(filter %$(CFG_SUFFIX).o, $^) -o $@ $(LDLIBS) $(PROJ_LDLIBS) $(LDLIBS_$(OS))
-$(CHMOD) $(CHMODFLAGSX) $@
$(addprefix $(buildlibdir)/, $(patsubst %, lib%$(CFG_SUFFIX).a, $(STATIC_LIBS) $(LIBS))): \
$(addprefix $(buildlibdir)/, \
$(patsubst %.s, %$(CFG_SUFFIX).o, $(filter %.s, $($(DEPS)))) \
$(patsubst %.c, %$(CFG_SUFFIX).o, $(filter %.c, $($(DEPS)))) \
$(patsubst %.cc, %$(CFG_SUFFIX).o, $(filter %.cc, $($(DEPS)))) \
$(patsubst %.cpp, %$(CFG_SUFFIX).o, $(filter %.cpp, $($(DEPS)))) \
$(patsubst %.C, %$(CFG_SUFFIX).o, $(filter %.C, $($(DEPS)))))
$(RM) $@
$(AR) $(ARFLAGS) $@ $^
-$(CHMOD) $(CHMODFLAGS) $@
$(addprefix $(buildlibdir)/, $(patsubst %, lib%$(CFG_SUFFIX).so, $(LIBS))): \
$(addprefix $(buildlibdir)/, \
$(patsubst %.s, %$(CFG_SUFFIX).o, $(filter %.s, $($(DEPS)))) \
$(patsubst %.c, %$(CFG_SUFFIX).o, $(filter %.c, $($(DEPS)))) \
$(patsubst %.cc, %$(CFG_SUFFIX).o, $(filter %.cc, $($(DEPS)))) \
$(patsubst %.cpp, %$(CFG_SUFFIX).o, $(filter %.cpp, $($(DEPS)))) \
$(patsubst %.C, %$(CFG_SUFFIX).o, $(filter %.C, $($(DEPS)))))
$(LINK.cc) $(LDFLAGS_SHARED) $(filter %$(CFG_SUFFIX).o, $^) -o $@.$(LIBVER) $(LDLIBS)
-$(CHMOD) $(CHMODFLAGSX) $@.$(LIBVER)
$(RM) $@
ln -s $(patsubst $(buildlibdir)/%,%, $@).$(LIBVER) $@
#---------------------------------------
# Object File compilation Rules
#----------------------------------------
$(buildbindir)/%$(CFG_SUFFIX).o: %.c
$(COMPILE.c) $(addprefix ${PWD}/,$<) -o $@
-$(CHMOD) $(CHMODFLAGS) $@
$(buildbindir)/%$(CFG_SUFFIX).o: %.cc
$(COMPILE.cc) $(addprefix ${PWD}/, $<) -o $@
-$(CHMOD) $(CHMODFLAGS) $@
$(buildbindir)/%$(CFG_SUFFIX).o: %.cpp
$(COMPILE.cc) $(addprefix ${PWD}/, $<) -o $@
-$(CHMOD) $(CHMODFLAGS) $@
$(buildbindir)/%$(CFG_SUFFIX).o: %.C
$(COMPILE.C) $(addprefix ${PWD}/, $<) -o $@
-$(CHMOD) $(CHMODFLAGS) $@
$(buildlibdir)/%$(CFG_SUFFIX).o: %.c
$(COMPILE.c) $(addprefix ${PWD}/, $<) -o $@
-$(CHMOD) $(CHMODFLAGS) $@
$(buildlibdir)/%$(CFG_SUFFIX).o: %.cc
$(COMPILE.cc) $(addprefix ${PWD}/, $<) -o $@
-$(CHMOD) $(CHMODFLAGS) $@
$(buildlibdir)/%$(CFG_SUFFIX).o: %.cpp
$(COMPILE.cc) $(addprefix ${PWD}/, $<) -o $@
-$(CHMOD) $(CHMODFLAGS) $@
$(buildlibdir)/%$(CFG_SUFFIX).o: %.C
$(COMPILE.C) $(addprefix ${PWD}/, $<) -o $@
-$(CHMOD) $(CHMODFLAGS) $@
$(buildlibdir)/%$(CFG_SUFFIX).o: %.s
$(AS) $(ASFLAGS) -o $@ $<
-$(CHMOD) $(CHMODFLAGS) $@
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -