📄 generic.mk
字号:
## generic definitions and variables used in all `Makefile's in our code.## here you will find compiler settings and options, libraries etc## Flag to avoid including this file more than once.ifndef GENERIC_MAKEGENERIC_MAKE = 1## some general settings: compiler, variables, helpers etc## important: set VPATH to parent directory as we compile in a subdirectory eg, Linux2VPATH = ..SHELL = /bin/shifndef CPLUSCPLUS = g++endifCPLUSPLUS = $(CPLUS)# Determine the Operating System (OS); under Linux, the following will give "Linux" and "Linux2"BASIC_OS = $(shell echo `uname -s`)OS = $(shell echo `uname -s``uname -r|cut -c1-1`)# Determine gcc major version (first number output by "gcc --version"): 3 or 4GCC_MAJOR_VERSION = $(shell echo `gcc --version | tr '. ' '\012\012' | egrep '3|4' | head -1`)## the link ~/advisor should point to /advisor/nils or ...# --- where our individual copies of The Code can be found#ACTUAL_HOME = $(shell echo `tcsh -cf 'cd ~/advisor; pwd'`)SRC_HOME = ${ACTUAL_HOME}/sourceBIN_HOME = ${ACTUAL_HOME}/bin## path to Ygl installation, if used (see below)#YGL_LIBDIR = ${ACTUAL_HOME}/Ygl## path to XML library, i.e. Xerces-C (see below)## # # XML_LIBDIR = /opt/xml4cXML_LIBDIR = ${ACTUAL_HOME}/xerces-c## path to Motif-compatible library## MOTIF_LIBDIR = /usr/X11R6/LessTif/Motif2.0MOTIF_LIBDIR = ${ACTUAL_HOME}/openmotif## Whether to display images. Enable "NO_DISPLAY = 1" for double speed but no display output#NO_DISPLAY = 0#NO_DISPLAY = 1# whether to use single precision float type for maths, instead of double (off for now)USE_FLOAT = 0# USE_FLOAT = 1## Compiler flags to generate debug output (-DDEBUG) or not.# NB: do define NDEBUG (-DNDEBUG) for releases to disable assertions!## development/debugging flags:CDEBUG = -DDEBUG -g -O -march=pentiumpro# profiling flags:# CDEBUG = -DNDEBUG -g -pg -O3 -march=pentiumpro# release flags:# CDEBUG = -DNDEBUG -g -O3 -march=pentiumpro -fomit-frame-pointer## These compiler options determing how many warnings are given## a large range of warnings --- standard, strongly recommendedDEFINES = -Wimplicit -Wreturn-type -Wformat -Wparentheses -Wchar-subscripts -Wswitch -Wpointer-arith -Wconversion -Wcast-align -Wuninitialized## additional warnings (not always useful but recommended before releases)# DEFINES += -Winline -Wshadow -Wcast-qual -Wunused -Wno-non-virtual-dtor# DEFINES += -pedantic -Winline -Wshadow -Wcast-qual -Wall -Wunused -Wno-non-virtual-dtor# important: switch on RTTI (just in case it is disabled by default)DEFINES += -frtti# whether to use single precision maths (float type) instead of double precisionifeq ($(USE_FLOAT),1)DEFINES += -DUSE_FLOAT=1endif# check whether to disable all graphical output...ifeq ($(NO_DISPLAY),1)# yes: don't display anything. However, still use GL image addressing etcDEFINES += -DNO_DISPLAY -DUSE_GLendif# endianness (MSB || LSB first):ifeq ($(BASIC_OS),Linux)DEFINES += -DLSB_FIRSTelseDEFINES += -DMSB_FIRSTendif# whether our compiler has min, max functions (ISO C99 defines them in stl_algobase)DEFINES += -DHAVE_MIN_MAX# whether our compiler has the ISO C99 <sstream> headerDEFINES += -DHAVE_SSTREAM## Graphics libraries: for image display and graphical user interface## Under Linux:# There is a 'GL' library (YGL) that emulates the SGI's GL using X11. This# library is quite complete, but does not have the functions to display b-splines# (which e.g. VOGL has). If 'GL' and 'VOGL' are used at the same time, some# problems of multiple defined functions appear while linking. As 'YGL' is# more complete than 'VOGL' in some aspects (devices, events, ...), this# can be solved using 'YGL', and instead of display curves, display # polygons (flag DISPLAY_POLY).ifeq ($(NO_DISPLAY),0)ifeq ($(BASIC_OS),Linux)DEFINES += -DUSE_GLGL_INCLUDES = -I$(YGL_LIBDIR)/gl -I$(YGL_LIBDIR)GL_LIBS = -L$(YGL_LIBDIR) -lYgl -Wl,-rpath -Wl,$(YGL_LIBDIR)endifendif## Motif-compatible libraries (e.g. openmotif, lesstif)#MOTIF_INCLUDES = -I$(MOTIF_LIBDIR)/include -I/usr/X11R6/include -I/usr/include/X11MOTIF_LIBS = -L$(MOTIF_LIBDIR)/lib -L/usr/X11R6/lib -L/usr/lib/X11R6 -lXm -lXt -lX11 -lXext -lXmu -lXpm## Language level defines## defining __STRICT_ANSI__ disables all non-ANSI C compiler extensions# defining _ISOC99_SOURCE _ISOC9X_SOURCE enables ISO/IEC 9899:1999(E) ("ISO C99")# as amended by ISO/IEC 9899:1999/COR1:2001(E) and should always be used# it gives us, among other things, math inlines like fmin(...) and fmax(...)# defining _BSD_SOURCE adds BSD 4.3 functions, like usleep(...) and strcasecmp(...)# defining _SVID_SOURCE gives System V style 48-bit random number generator# functions void srand48(long int seed_val), double drand48(void) which# are not always needed and will only be used if you define _SVID_SOURCEifeq ($(BASIC_OS),Linux)DEFINES += -DDISPLAY_POLY# NB enable _BSD_SOURCE on Linux systems during development to get timer functions (displaying...)DEFINES += -D__STRICT_ANSI__ -D_ISOC99_SOURCE=1 -D_ISOC9X_SOURCE=1 -D_BSD_SOURCE=1 -DHAVE_POSIX_PIPES# DEFINES += -D__STRICT_ANSI__ -D_ISOC99_SOURCE=1 -D_ISOC9X_SOURCE=1endif ## thread handling: we now use the ANSI/IEEE POSIX 1003.1c - 1995 compliant pthread library:#ifeq ($(BASIC_OS),Linux) DEFINES += -D_REENTRANT SYS_LIBS += -lpthreadendif############### System specific definitions.## Math libraries: choose either NAG or BLAS/LAPACK### --- this is for NAG. we use mark 15 at the moment (2002)## MATH_LIBS = -L/usr/lib/nag \# -lf01aaf -lf02abf -lf02agf -lf01qcf -lf01qef -lf02wef -lf04jgf \# -Wl,-rpath -Wl,/usr/lib/nag \# -lblas -lg2c -lm## --- this is for BLAS/LAPACK, we use version 3.0 from http://www.netlib.org/lapack/#ifeq ($(GCC_MAJOR_VERSION),3) # use this first option for gcc version 3.x MATH_LIBS = -llapack -lblas -lm -lg2celse # use this second option for gcc version 4.x MATH_LIBS = -llapack -lblas -lm -lgfortranendifDEFINES += -DUSE_LAPACK## XML library: we use Xerces-C, available from http://xml.apache.org/xerces-c/## In the past we used XML4C from http://www.alphaworks.ibm.com/ but it is discontinued# XML_LIBS = -lxerces-c -licu-uc -licudata -Wl,-rpath -Wl,$(XML_LIBDIR)/lib #XML_LIBS = -L$(XML_LIBDIR)/lib -lxerces-c -Wl,-rpath -Wl,$(XML_LIBDIR)/lib XML_INCLUDES = -I$(XML_LIBDIR)/include -I$(XML_LIBDIR)/include/xercesc## IEEE1394 (aka FireWire or i.Link) libraries #IEEE1394_LIBS = -lavc1394 -lraw1394 -lrom1394 -ldvIEEE1394_INCLUDES = -I/usr/include/libavc1394 -I/usr/include/libraw1394 -I/usr/include/libdv## OS specific defines which are queried within The Code#ifeq ($(BASIC_OS),Linux)# GNU g++ has machine-dependent optimizations for functions defined in# string.h, most probably using inline assembler code; these might be quite# expensive since the code size can increase significantly. These# optimizations are not used unless the symbol __USE_STRING_INLINES is defined# before including the <cstring> header. We enable these since we optimize# for speed (not size).DEFINES += -D__USE_STRING_INLINESDEFINES += -DLINUXendif## generic variables for all runs of the compiler#GENERIC_INCLUDES = -I.. \ -I$(SRC_HOME)/data \ -I$(SRC_HOME)/imgsrc \ -I$(SRC_HOME)/tracking \ -I$(SRC_HOME)/matrix \ -I$(SRC_HOME)/PCA \ -I$(SRC_HOME)/utils \ -I$(SRC_HOME)/interface \ -I$(SRC_HOME)/xml \ $(XML_INCLUDES) \ $(IEEE1394_INCLUDES) \ $(MOTIF_INCLUDES) \ $(GL_INCLUDES)GENERIC_LDFLAGS = -L../$(OS) \ -L$(SRC_HOME)/data/$(OS) \ -L$(SRC_HOME)/imgsrc/$(OS) \ -L$(SRC_HOME)/tracking/$(OS) \ -L$(SRC_HOME)/matrix/$(OS) \ -L$(SRC_HOME)/PCA/$(OS) \ -L$(SRC_HOME)/utils/$(OS) \ -L$(SRC_HOME)/interface/$(OS) \ -L$(SRC_HOME)/xml/$(OS) \ $(XML_LIBS) \ $(MOTIF_LIBS) \ $(MATH_LIBS) \ $(SYS_LIBS) \ $(XML_LIBS) \ $(GL_LIBS) \ $(IEEE1394_LIBS)## Finally, define the generic compiler command with the options defined above#C++ = $(CPLUSPLUS) $(DEFINES) $(GENERIC_INCLUDES) $(GL_INCLUDES)## do this for profiling on a GNU system (very easy): nts May 2001## 1 - compile with "-g -pg -a" flags (-pg is most important)# 2 - run program (give -l last_frame_no because program HAS to exit nicely)# this creates statistical data file gmon.out upon exiting# 3 - run gprof on the executable (reads and uses created gmon.out file)# this creates the profiling data on stdout (so say "> filename")# 4 - finished. view file in favourite viewer/editor, use kprof or similar#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -