2 # This is helper makefile that can build DLL or EXE for i386, amd64 or ia64 platform.
3 # User of the makefile should specify the following symbols:
4 # * PLATFORM (I386/AMD64/IA64) - the target platform (I386 by default)
5 # * DEBUG (1/0) - iff a debug version of the binary should be build (0 by default)
6 # * TARGET - base name of the binary (ex.: cxcore, cv, ml, cvtest etc.)
7 # * BINTYPE (DLL/CONSOLE/APP) - the type of application (dll/console app/app with gui), dll by default
8 # * ROOT - the relative path to the root opencv directory
9 # * OBJS - the list of object files, each file must be preceded with $(OBJPATH)\
10 # * INCS - the list of include files
11 # * CXX - the compiler to be used (cl by default)
12 # * CXXFLAGS_PROJ - the initial compiler options
13 # (some project-specific defines and the list of include directories)
14 # * LIBS_PROJ - the initial linker options
15 # (the list of linked libraries + path to the libraries)
16 # * RES_FILE - resource file, if any
17 # * PDBNAME - temporary pdb filename (e.g. vc60.pdb for MSVC6)
46 !if "$(BINTYPE)"=="DLL"
53 CXXFLAGS_DLL = /D "CVAPI_EXPORTS"
54 LINKFLAGS_DLL = /subsystem:windows /dll /implib:$(OUTLIB)
61 !if "$(BINTYPE)"=="CONSOLE"
62 LINKFLAGS_DLL = /subsystem:console
63 !else if "$(BINTYPE)"=="APP"
64 LINKFLAGS_DLL = /subsystem:windows
77 CXXFLAGS_DBG = /D "_DEBUG" /MDd /Gm $(DBG_CHECK) /Od
78 TEMP_DBG_SUFFIX = _Dbg
83 CXXFLAGS_DBG = /D "NDEBUG" /MD /O2 /Ob2
84 TEMP_DBG_SUFFIX = _Rls
96 !if "$(PLATFORM)" == "I386"
103 !else if "$(PLATFORM)" == "AMD64"
105 CXXFLAGS_P = /D "WIN64" /D "EM64T"
110 !else if "$(PLATFORM)" == "IA64"
112 CXXFLAGS_P = /D "WIN64"
118 !error Unknown platform
127 PCH_STARTER = precomp
129 PCH_TARGET = "$(OBJPATH)\$(TARGET).pch"
130 PCH_OBJ = $(OBJPATH)\$(PCH_STARTER).obj
131 CXXFLAGS_PCH = /Fp$(PCH_TARGET) /Yu"$(PCH)"
134 OBJPATH = $(ROOT)\_temp\$(TARGET)$(TEMP_DBG_SUFFIX)$(TEMP_P_SUFFIX)
135 OUTBIN = $(ROOT)\bin\$(TARGET)$(VER)$(DBG)$(OUT_P_SUFFIX)$(EXT)
136 OUTPDB = $(ROOT)\bin\$(TARGET)$(VER)$(DBG)$(OUT_P_SUFFIX).pdb
137 OUTLIB = $(ROOT)\lib\$(TARGET)$(DBG)$(OUT_P_SUFFIX).lib
138 TEMPPDB = $(OBJPATH)\$(PDBNAME)
139 DEF_LIBS = kernel32.lib user32.lib gdi32.lib advapi32.lib
144 CXXFLAGS = /nologo /W4 /D "WIN32" /D"_WINDOWS" $(CXXFLAGS_P) $(CXXFLAGS_DBG) $(CXXFLAGS_DLL) /EHsc /Zi /FD $(CXXFLAGS_PCH) $(CXXFLAGS_PROJ) /Fd"$(TEMPPDB)" $(MY_CXXFLAGS) /c /Fo
145 LINKFLAGS = /nologo /machine:$(PLATFORM) /pdb:$(OUTPDB) /debug /out:$(OUTBIN) $(LINKFLAGS_DLL) $(DEF_LIBS) $(MY_LINKFLAGS)
147 $(OUTBIN): $(PCH_TARGET) $(OBJS)
148 @echo ********* Linking $(TARGET) ...
149 @-mkdir $(ROOT)\bin 2> nul
150 @-mkdir $(ROOT)\lib 2> nul
151 @$(LINK) $(LINKFLAGS) $(LIBS_PROJ) $(PCH_OBJ) $(OBJS)
155 $(PCH_TARGET): $(PCH_STARTER).cpp
156 @-mkdir $(OBJPATH) 2> nul
157 @$(CXX) $(CXXFLAGS)$(PCH_OBJ) /Yc"$(PCH)" $(PCH_STARTER).cpp
161 {$(SRCPATH)}.cpp{$(OBJPATH)}.obj:
162 @-mkdir $(OBJPATH) 2> nul
163 @$(CXX) $(CXXFLAGS)"$@" $<
165 {$(SRCPATH)}.c{$(OBJPATH)}.obj:
166 @-mkdir $(OBJPATH) 2> nul
167 @$(CXX) $(CXXFLAGS)$@ $<
173 @-del $(OUTBIN) 2> nul
174 @-del $(OUTPDB) 2> nul
175 @-del $(OUTLIB) 2> nul
176 @-rmdir /s /q $(OBJPATH) 2> nul
178 $(OBJS): $(PCH_TARGET) $(INCS)