读书人

范例分析makefile

发布时间: 2012-12-18 12:43:41 作者: rapoo

实例分析makefile

?

今天学习了一下Makefile,由于没有搞清楚makefile的执行过程差点又崩溃了,呵呵。

?

?? 我学些的是firedrill的makefile,开始觉得其好“智能”,其实并不十分智能。

?

先看一下目录结构:

?

?

?? httptunnel---config

?? ? ? ? ? ? ? ? ? |

?? ? ? ? ? ? ? ? ? ---docs

?? ? ? ? ? ? ? ? ?|

?? ? ? ? ? ? ? ? ? ---src----libhttpun---------------------- ? ?1.c,1.h

?? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

?? ? ? ? ? ? ? ? ? ? ? ? ? -----main.cc ? ? ? ? ? ? ? ? ? ? ? ? ? ? ----- ?2.c, 2.h ? ? ? ? ? ? ? ?

?? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

?? ? ? ? ? ? ? ? ? ? ? ? ? -----Makefile ? ? ? ? ? ? ? ? ? ? ? ? ? ?------Makefile

?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?----

?

?

我们先看一下src下面的Makefile:

# (C) 2005 Richard Mills / The Linux Academy Ltd.## Makefile for HTTPTunnel## $Id: Makefile.HTTPTUNNEL,v 1.36 2009-04-03 11:46:17 rich Exp $############## Global bits##############定义的变量SHELL=/bin/shOS=$(shell uname -s)CC=g++SVRAUTH=FILESSL=NONAME=HTTPTUNNELLIBDIRS=libhttptunAPPOBJS=main.o# Default auth settingsAUTHLIBS=# Default SSL settingsSSLLIBS=SSLKEY=SSLCERT=SSLDEPENDS=# Server authentication settingsifeq ($(SVRAUTH),DB)AUTHLIBS=-lmysqlppendif# SSL settingsifeq ($(SSL),YES)SSLKEY=SSLKey.pemSSLCERT=SSLCert.pemSSLDEPENDS=$(SSLKEY) $(SSLCERT)endif# Application nameTUNLIBNAME=libhttptun/libhttptun.aFDSNAME=FiredrillFDANAME=firedrillHTSNAME=HTTPTunnelHTANAME=httptunnelifeq ($(NAME),FIREDRILL)NAMEFLAGS=-DSTRNAME=\"${FDSNAME}\"APPNAME=$(FDANAME)elseNAMEFLAGS=-DSTRNAME=\"${HTSNAME}\"APPNAME=$(HTANAME)endif# Build objectsTUNAPPOBJS=$(APPOBJS)GLOBALLIBS=-lpthread# Linux specificifeq ($(findstring Linux,$(OS)),Linux)ifeq ($(SSL),YES)SSLLIBS=-lsslendifPLATFORMLIBS=$(SSLLIBS)endif# Solaris specificifeq ($(findstring SunOS,$(OS)),SunOS)ifeq ($(SSL),YES)SSLLIBS=-L/usr/local/ssl/lib -lssl -lcrypto -ldlendifPLATFORMLIBS=$(SSLLIBS) -lsocket -lnsl -lrtendif# Mac OS X specificifeq ($(findstring Darwin,$(OS)),Darwin)ifeq ($(SSL),YES)SSLLIBS=-lssl -lcryptoendifPLATFORMLIBS=$(SSLLIBS)endif# Cygwin specificifeq ($(findstring CYGWIN,$(OS)),CYGWIN)ifeq ($(SSL),YES)SSLLIBS=-lssl -lcryptoendifPLATFORMLIBS=$(SSLLIBS)endif# Includes & compile flagsVERSION=1.3.2INCLUDES=-I. -I./libhttptun#DEBUGCFLAGS=-g -DDEBUG_TUN -DDEBUG_LOG_DATA -DDEBUG_THREADS -DDEBUG_EVENTS#DEBUGCFLAGS=-g -DDEBUG_TUN -DDEBUG_HTTP_MSG_LOSS#DEBUGCFLAGS=-g -DDEBUG_TUNDEBUGCFLAGS=-gGLOBALCFLAGS=-Wall -DVERSION=\"$(VERSION)\" $(NAMEFLAGS) $(DEBUGCFLAGS)CCFLAGS=$(GLOBALCFLAGS) $(INCLUDES)LIBS=$(GLOBALLIBS) $(AUTHLIBS) $(PLATFORMLIBS)# DependenciesGLOBALDEPS=MakefileTUNAPPDEPENDS=$(patsubst %.o,%.d,$(TUNAPPOBJS))DEPENDS=$(TUNAPPDEPENDS) $(TSTAPPDEPENDS)############## Build rules##############makefile程序执行的入口# Top level.PHONY:all   #表明all并不是真正的文件,是个指令all:depend libdirs $(APPNAME) $(SSLDEPENDS)#all 这个指令依赖 后来4个文件,或者伪指令,$(**)表示的是文件,depend,libdirs可以#从后面判断是伪指令。# Dependenciesinclude $(DEPENDS)%.d:%.cc@echo -- makedepend $@@bash -c '$(CC) $(CCFLAGS) -M $(<F) >$(*F).d; \[ -s $(*F).d ] || rm -f $(*F).d '; \exit_status=$$? ; \if [ $${exit_status} -ne 0 ]; then exit $${exit_status}; fi.PHONY:depend      #表明depend是伪指令depend:$(DEPENDS)echo 'depend    \n'# SSL$(SSLKEY):openssl genrsa -out $(SSLKEY) 1024$(SSLCERT):$(SSLKEY)openssl req -new -x509 -key $(SSLKEY) -batch -subj /O=TheLinuxAcademy \-out $(SSLCERT)# Library.PHONY:libdirs $(LIBDIRS)  #libdirs,$(LIBDIRS)都是伪指令libdirs:$(LIBDIRS)echo 'libdirs   \n'$(LIBDIRS): echo 'LIBDIRS  \n'  $(MAKE) -C $@# Application$(APPNAME):$(TUNAPPOBJS) libdirsecho '222222\n'$(CC) -o $(APPNAME) $(TUNAPPOBJS) $(TUNLIBNAME) $(LIBS)echo '333333\n'%.o:%.cc $(GLOBALDEPS)echo 'aaaaaaa  \n'$(CC) -c $(CCFLAGS) $*.ccecho 'bbbbbb  \n'##################### Other useful rules####################.PHONY:cleanclean:cd libhttptun && $(MAKE) cleanrm -f $(APPNAME) *.o *.d core* *.pem
?

?? ?首先从定义变量,然后从all:那里执行,结果依赖depend,libdirs等,那就先执行depend标号后面的语句,

?

?? ?输出:depend

?

?? ?然后libdirs标号后面执行,libdirs又依赖$(LIBDIRS)标号,就跳到$(LIBDIRS)标号后面的语句执行:输出:

?

???echo 'LIBDIRS ?\n'

?

?? ?$(MAKE) -C $@

?

?? ?跳到了libhttpun目录下,这个红色语句表明,执行这个目录下的makefile。

?

?? 这就行堆栈一样,一层层执行,先进入,后回溯,呵呵。

?

?

?? 我们也贴出libhttpun目录下的makefile欣赏一下:

?

???# (C) 2008 Richard Mills / The Linux Academy Ltd.

## Makefile for libhttptun## $Id: Makefile.RELEASE,v 1.2 2009-03-20 11:52:25 rich Exp $############## Global bits#############SHELL=/bin/shOS=$(shell uname -s)CC=g++AR=arSVRAUTH=FILESSL=NOLIBOBJS=HTTPTunneler.o Logger.o Server.o ClientServer.o ServerServer.o \Sock.o TCPSock.o UDPSock.o SSLSock.o Tunnel.o TestTunnel.o \ClientTunnel.o TestClientTunnel.o ServerTunnel.o TestServerTunnel.o \Tunneler.o ClientTunneler.o SOCKSClientTunneler.o ServerTunneler.o \TunnelParms.o ClientTunnelParms.o ServerTunnelParms.o TuneSettings.o \Reader.o RawReader.o SOCKSReader.o HTTPReader.o Writer.o \RawWriter.o HTTPWriter.o Connection.o RawConnection.o \DummyRawConnection.o SOCKSConnection.o HTTPConnection.o \HTTPMsg.o HTTPRequestMsg.o HTTPResponseMsg.o HTTPGetMsg.o \MsgParms.o HTTPMsgParms.o ErrorMsgParms.o AutoPtr.o TunnelStats.o \Payload.o RawBuff.o Utils.o Time.o URLCode.o SeqNo.o Firewall.o \MD5.o MD4.o DES.o OptionsParser.o GlobalConfig.o SideConfig.o \ClientSideConfig.o ServerSideConfig.o ProxySettings.o \TunnelConfig.o TunnelID.o TunnelerID.o Authenticator.o \ClientAuthenticator.o ServerAuthenticator.o \DefaultServerAuthenticator.o AuthDigest.o AuthSettings.o \ServerAuthSettings.o User.o Quotas.o ConnectionManager.o \ConnectProxy.o EventReceiver.o IdentifyEvent.o \Event.o ConnectResultEvent.o ShutdownTunnelEvent.o \TunnelDestroyedEvent.o \ShutdownConnectionEvent.o ReadEvent.o ConnectionErrorEvent.o \TunnelUnviableEvent.o MsgArrivedEvent.o TimedEvent.o ConnectEvent.o \RawDataArrivedEvent.o PollTimeoutEvent.o CheckAckEvent.o \SendMsgEvent.o LeakTunnelErrorEvent.o TunnelStateEvent.o \ConnectionStateEvent.o ConnectionManagementEvent.o AuditEvent.o \TunnelManagementEvent.o UDPSilentEvent.o FlushConnectionEvent.o \LaunchServerTestEvent.o NewTunnelParmsEvent.o AuthSuccessEvent.o \NTLM.o SecurityBuff.o ConfigBlob.o GlobalConfigBlob.o \ClientConfigBlob.o ServerConfigBlob.o SockTunClientConfigBlob.o \SockTunServerConfigBlob.o SockTunClient.o SockTunServer.o \TCPSockTunServer.o UDPSockTunServer.o TCPSockTunClient.o \UDPSockTunClient.o SockTunCallback.o SockTunHandle.o \ClientSockTunHandle.o ServerSockTunHandle.o AddrInfo.o \ThreadManager.o Thread.o Callback.o Mutex.o MutexVar.o ConditionVar.oCLIOBJS=testcli.oSVROBJS=testsvr.o# Default auth settingsAUTHOBJS=AUTHLIBS=AUTHINCLUDES=AUTHFLAGS=# Default SSL settingsSSLLIBS=SSLINCLUDES=SSLFLAGS=# Server authentication settingsifeq ($(SVRAUTH),DB)AUTHOBJS=DBServerAuthenticator.o DBUserDetails.oAUTHLIBS=-lmysqlppAUTHINCLUDES=-I/usr/include/mysql -I/usr/include/mysql++AUTHFLAGS=-DAUTH_DBendififeq ($(SVRAUTH),FILE)AUTHOBJS=FileServerAuthenticator.oAUTHFLAGS=-DAUTH_FILEendif# SSL settingsifeq ($(SSL),YES)SSLFLAGS=-DUSE_SSLendif# Application nameTUNLIBNAME=libhttptun.aAPPCLINAME=testcliAPPSVRNAME=testsvr# Build objectsTUNLIBOBJS=$(LIBOBJS) $(AUTHOBJS)APPCLIOBJS=$(CLIOBJS)APPSVROBJS=$(SVROBJS)GLOBALLIBS=-lpthread# Linux specificifeq ($(findstring Linux,$(OS)),Linux)PLATFORMNAME=LINUXifeq ($(SSL),YES)SSLINCLUDES=-I/usr/include/opensslSSLLIBS=-lsslendifPLATFORMLIBS=$(SSLLIBS)endif# Solaris specificifeq ($(findstring SunOS,$(OS)),SunOS)PLATFORMNAME=SOLARISifeq ($(SSL),YES)SSLINCLUDES=-I/usr/local/ssl/include/openssl -I/usr/local/ssl/includeSSLLIBS=-L/usr/local/ssl/lib -lssl -lcrypto -ldlendifPLATFORMLIBS=$(SSLLIBS) -lsocket -lnsl -lrtendif# Mac OS X specificifeq ($(findstring Darwin,$(OS)),Darwin)PLATFORMNAME=OSXifeq ($(SSL),YES)SSLINCLUDES=-I/usr/include/opensslSSLLIBS=-lssl -lcryptoendifPLATFORMLIBS=$(SSLLIBS)endif# Cygwin specificifeq ($(findstring CYGWIN,$(OS)),CYGWIN)PLATFORMNAME=CYGWINifeq ($(SSL),YES)SSLINCLUDES=-I/usr/include/opensslSSLLIBS=-lssl -lcryptoendifPLATFORMLIBS=$(SSLLIBS)endif# Includes & compile flagsVERSION=1.3.2PLATFORM=-DPLATFORM_$(PLATFORMNAME) -DPLATNAME=\"$(PLATFORMNAME)\"INCLUDES=-I. $(SSLINCLUDES) $(AUTHINCLUDES)#DEBUGCFLAGS=-g -DDEBUG_TUN -DDEBUG_LOG_DATA -DDEBUG_THREADS -DDEBUG_EVENTS#DEBUGCFLAGS=-g -DDEBUG_TUN -DDEBUG_HTTP_MSG_LOSS#DEBUGCFLAGS=-g -DDEBUG_TUNDEBUGCFLAGS=-gGLOBALCFLAGS=-Wall -DLIBVERSION=\"$(VERSION)\" $(PLATFORM) $(DEBUGCFLAGS) \$(AUTHFLAGS) $(SSLFLAGS)CCFLAGS=$(GLOBALCFLAGS) $(INCLUDES)LIBS=$(GLOBALLIBS) $(AUTHLIBS) $(PLATFORMLIBS)# DependenciesGLOBALDEPS=MakefileTUNLIBDEPENDS=$(patsubst %.o,%.d,$(TUNLIBOBJS))APPCLIDEPENDS=$(patsubst %.o,%.d,$(APPCLIOBJS))APPSVRDEPENDS=$(patsubst %.o,%.d,$(APPSVROBJS))DEPENDS=$(TUNLIBDEPENDS) $(APPCLIDEPENDS) $(APPSVRDEPENDS)############## Build rules############## Top level.PHONY:allall:depend $(TUNLIBNAME)# Dependenciesinclude $(DEPENDS)%.d:%.cc@echo -- makedepend $@@bash -c '$(CC) $(CCFLAGS) -M $(<F) >$(*F).d; \[ -s $(*F).d ] || rm -f $(*F).d '; \exit_status=$$? ; \if [ $${exit_status} -ne 0 ]; then exit $${exit_status}; fi.PHONY:dependdepend:$(DEPENDS)# Library$(TUNLIBNAME):$(TUNLIBOBJS)$(AR) -r $(TUNLIBNAME) $(TUNLIBOBJS)# Test applications.PHONY:testtest:$(APPCLINAME) $(APPSVRNAME) $(TUNLIBNAME)$(APPCLINAME):$(CLIOBJS) $(TUNLIBNAME)$(CC) -o $(APPCLINAME) $(CLIOBJS) $(TUNLIBNAME) $(LIBS)$(APPSVRNAME):$(APPSVROBJS) $(TUNLIBNAME)$(CC) -o $(APPSVRNAME) $(APPSVROBJS) $(TUNLIBNAME) $(LIBS)%.o:%.cc $(GLOBALDEPS)$(CC) -c $(CCFLAGS) $*.cc##################### Other useful rules####################.PHONY:cleanclean:rm -f $(TUNLIBNAME) $(APPCLINAME) $(APPSVRNAME) *.o *.d
?

?

?? ?最后的执行结果是这样的:

?

???-- makedepend main.d

echo 'depend    \n'depend    echo 'LIBDIRS  \n'LIBDIRS  make -C libhttptunmake[1]: Entering directory `/home/bardwu/bard/httptunnel/src/libhttptun'-- makedepend testsvr.d-- makedepend testcli.d-- makedepend FileServerAuthenticator.d-- makedepend ConditionVar.d-- makedepend MutexVar.d-- makedepend Mutex.d-- makedepend Callback.d-- makedepend Thread.d-- makedepend ThreadManager.d-- makedepend AddrInfo.d-- makedepend ServerSockTunHandle.d-- makedepend ClientSockTunHandle.d-- makedepend SockTunHandle.d-- makedepend SockTunCallback.d-- makedepend UDPSockTunClient.d-- makedepend TCPSockTunClient.d-- makedepend UDPSockTunServer.d-- makedepend TCPSockTunServer.d-- makedepend SockTunServer.d-- makedepend SockTunClient.d-- makedepend SockTunServerConfigBlob.d-- makedepend SockTunClientConfigBlob.d-- makedepend ServerConfigBlob.d-- makedepend ClientConfigBlob.d-- makedepend GlobalConfigBlob.d-- makedepend ConfigBlob.d-- makedepend SecurityBuff.d-- makedepend NTLM.d-- makedepend AuthSuccessEvent.d-- makedepend NewTunnelParmsEvent.d-- makedepend LaunchServerTestEvent.d-- makedepend FlushConnectionEvent.d-- makedepend UDPSilentEvent.d-- makedepend TunnelManagementEvent.d-- makedepend AuditEvent.d-- makedepend ConnectionManagementEvent.d-- makedepend ConnectionStateEvent.d-- makedepend TunnelStateEvent.d-- makedepend LeakTunnelErrorEvent.d-- makedepend SendMsgEvent.d-- makedepend CheckAckEvent.d-- makedepend PollTimeoutEvent.d-- makedepend RawDataArrivedEvent.d-- makedepend ConnectEvent.d-- makedepend TimedEvent.d-- makedepend MsgArrivedEvent.d-- makedepend TunnelUnviableEvent.d-- makedepend ConnectionErrorEvent.d-- makedepend ReadEvent.d-- makedepend ShutdownConnectionEvent.d-- makedepend TunnelDestroyedEvent.d-- makedepend ShutdownTunnelEvent.d-- makedepend ConnectResultEvent.d-- makedepend Event.d-- makedepend IdentifyEvent.d-- makedepend EventReceiver.d-- makedepend ConnectProxy.d-- makedepend ConnectionManager.d-- makedepend Quotas.d-- makedepend User.d-- makedepend ServerAuthSettings.d-- makedepend AuthSettings.d-- makedepend AuthDigest.d-- makedepend DefaultServerAuthenticator.d-- makedepend ServerAuthenticator.d-- makedepend ClientAuthenticator.d-- makedepend Authenticator.d-- makedepend TunnelerID.d-- makedepend TunnelID.d-- makedepend TunnelConfig.d-- makedepend ProxySettings.d-- makedepend ServerSideConfig.d-- makedepend ClientSideConfig.d-- makedepend SideConfig.d-- makedepend GlobalConfig.d-- makedepend OptionsParser.d-- makedepend DES.d-- makedepend MD4.d-- makedepend MD5.d-- makedepend Firewall.d-- makedepend SeqNo.d-- makedepend URLCode.d-- makedepend Time.d-- makedepend Utils.d-- makedepend RawBuff.d-- makedepend Payload.d-- makedepend TunnelStats.d-- makedepend AutoPtr.d-- makedepend ErrorMsgParms.d-- makedepend HTTPMsgParms.d-- makedepend MsgParms.d-- makedepend HTTPGetMsg.d-- makedepend HTTPResponseMsg.d-- makedepend HTTPRequestMsg.d-- makedepend HTTPMsg.d-- makedepend HTTPConnection.d-- makedepend SOCKSConnection.d-- makedepend DummyRawConnection.d-- makedepend RawConnection.d-- makedepend Connection.d-- makedepend HTTPWriter.d-- makedepend RawWriter.d-- makedepend Writer.d-- makedepend HTTPReader.d-- makedepend SOCKSReader.d-- makedepend RawReader.d-- makedepend Reader.d-- makedepend TuneSettings.d-- makedepend ServerTunnelParms.d-- makedepend ClientTunnelParms.d-- makedepend TunnelParms.d-- makedepend ServerTunneler.d-- makedepend SOCKSClientTunneler.d-- makedepend ClientTunneler.d-- makedepend Tunneler.d-- makedepend TestServerTunnel.d-- makedepend ServerTunnel.d-- makedepend TestClientTunnel.d-- makedepend ClientTunnel.d-- makedepend TestTunnel.d-- makedepend Tunnel.d-- makedepend SSLSock.d-- makedepend UDPSock.d-- makedepend TCPSock.d-- makedepend Sock.d-- makedepend ServerServer.d-- makedepend ClientServer.d-- makedepend Server.d-- makedepend Logger.d-- makedepend HTTPTunneler.dmake[1]: Leaving directory `/home/bardwu/bard/httptunnel/src/libhttptun'make[1]: Entering directory `/home/bardwu/bard/httptunnel/src/libhttptun'g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPTunneler.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Logger.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Server.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientServer.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerServer.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Sock.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TCPSock.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   UDPSock.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SSLSock.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Tunnel.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TestTunnel.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientTunnel.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TestClientTunnel.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerTunnel.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TestServerTunnel.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Tunneler.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientTunneler.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SOCKSClientTunneler.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerTunneler.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelParms.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientTunnelParms.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerTunnelParms.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TuneSettings.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Reader.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   RawReader.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SOCKSReader.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPReader.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Writer.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   RawWriter.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPWriter.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Connection.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   RawConnection.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   DummyRawConnection.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SOCKSConnection.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPConnection.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPMsg.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPRequestMsg.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPResponseMsg.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPGetMsg.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   MsgParms.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPMsgParms.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ErrorMsgParms.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AutoPtr.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelStats.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Payload.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   RawBuff.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Utils.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Time.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   URLCode.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SeqNo.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Firewall.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   MD5.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   MD4.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   DES.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   OptionsParser.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   GlobalConfig.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SideConfig.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientSideConfig.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerSideConfig.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ProxySettings.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelConfig.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelID.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelerID.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Authenticator.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientAuthenticator.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerAuthenticator.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   DefaultServerAuthenticator.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AuthDigest.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AuthSettings.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerAuthSettings.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   User.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Quotas.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectionManager.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectProxy.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   EventReceiver.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   IdentifyEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Event.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectResultEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ShutdownTunnelEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelDestroyedEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ShutdownConnectionEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ReadEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectionErrorEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelUnviableEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   MsgArrivedEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TimedEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   RawDataArrivedEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   PollTimeoutEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   CheckAckEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SendMsgEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   LeakTunnelErrorEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelStateEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectionStateEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectionManagementEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AuditEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelManagementEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   UDPSilentEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   FlushConnectionEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   LaunchServerTestEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   NewTunnelParmsEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AuthSuccessEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   NTLM.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SecurityBuff.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConfigBlob.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   GlobalConfigBlob.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientConfigBlob.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerConfigBlob.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunClientConfigBlob.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunServerConfigBlob.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunClient.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunServer.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TCPSockTunServer.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   UDPSockTunServer.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TCPSockTunClient.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   UDPSockTunClient.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunCallback.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunHandle.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientSockTunHandle.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerSockTunHandle.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AddrInfo.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ThreadManager.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Thread.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Callback.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Mutex.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   MutexVar.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConditionVar.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   FileServerAuthenticator.ccar -r libhttptun.a HTTPTunneler.o Logger.o Server.o ClientServer.o ServerServer.o Sock.o TCPSock.o UDPSock.o SSLSock.o Tunnel.o TestTunnel.o ClientTunnel.o TestClientTunnel.o ServerTunnel.o TestServerTunnel.o Tunneler.o ClientTunneler.o SOCKSClientTunneler.o ServerTunneler.o TunnelParms.o ClientTunnelParms.o ServerTunnelParms.o TuneSettings.o Reader.o RawReader.o SOCKSReader.o HTTPReader.o Writer.o RawWriter.o HTTPWriter.o Connection.o RawConnection.o DummyRawConnection.o SOCKSConnection.o HTTPConnection.o HTTPMsg.o HTTPRequestMsg.o HTTPResponseMsg.o HTTPGetMsg.o MsgParms.o HTTPMsgParms.o ErrorMsgParms.o AutoPtr.o TunnelStats.o Payload.o RawBuff.o Utils.o Time.o URLCode.o SeqNo.o Firewall.o MD5.o MD4.o DES.o OptionsParser.o GlobalConfig.o SideConfig.o ClientSideConfig.o ServerSideConfig.o ProxySettings.o TunnelConfig.o TunnelID.o TunnelerID.o Authenticator.o ClientAuthenticator.o ServerAuthenticator.o DefaultServerAuthenticator.o AuthDigest.o AuthSettings.o ServerAuthSettings.o User.o Quotas.o ConnectionManager.o ConnectProxy.o EventReceiver.o IdentifyEvent.o Event.o ConnectResultEvent.o ShutdownTunnelEvent.o TunnelDestroyedEvent.o ShutdownConnectionEvent.o ReadEvent.o ConnectionErrorEvent.o TunnelUnviableEvent.o MsgArrivedEvent.o TimedEvent.o ConnectEvent.o RawDataArrivedEvent.o PollTimeoutEvent.o CheckAckEvent.o SendMsgEvent.o LeakTunnelErrorEvent.o TunnelStateEvent.o ConnectionStateEvent.o ConnectionManagementEvent.o AuditEvent.o TunnelManagementEvent.o UDPSilentEvent.o FlushConnectionEvent.o LaunchServerTestEvent.o NewTunnelParmsEvent.o AuthSuccessEvent.o NTLM.o SecurityBuff.o ConfigBlob.o GlobalConfigBlob.o ClientConfigBlob.o ServerConfigBlob.o SockTunClientConfigBlob.o SockTunServerConfigBlob.o SockTunClient.o SockTunServer.o TCPSockTunServer.o UDPSockTunServer.o TCPSockTunClient.o UDPSockTunClient.o SockTunCallback.o SockTunHandle.o ClientSockTunHandle.o ServerSockTunHandle.o AddrInfo.o ThreadManager.o Thread.o Callback.o Mutex.o MutexVar.o ConditionVar.o FileServerAuthenticator.omake[1]: Leaving directory `/home/bardwu/bard/httptunnel/src/libhttptun'echo 'libdirs   \n'libdirs   echo 'aaaaaaa  \n'aaaaaaa  g++ -c -Wall -DVERSION=\"1.3.2\" -DSTRNAME=\"HTTPTunnel\" -g -I. -I./libhttptun main.ccecho 'bbbbbb  \n'bbbbbb  echo '222222\n'222222g++ -o httptunnel main.o libhttptun/libhttptun.a -lpthread   -lsocket -lnsl -lrtecho '333333\n'333333
?

?? ?其实这个编译的过程很简单,就是把src目录下的libhttpun下的c文件编译打包,最后和src 下的main.o编译连接成

?

?? httptunnel这个可执行文件,从这句可以看出。

?

??g++ -o httptunnel main.o libhttptun/libhttptun.a -lpthread -lsocket -lnsl -lrt

?

?? 开始,我没找到libhttpun目录下也有makefile,以为是makefile智能规则推演出来,进行打包了,原来不是。

?

??不过我不明白的是,为什么不用shell命令组合一下把libhttpun下所有的.o文件,打个包不就行了吗,这样以后每次添加

?

??源程序,就不需要手工添加条目了,不然这样也太烦人了,呵呵,有机会试试。

?

??如果您不太懂makefile ,请参阅:http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/index.html#content

?

?

?

读书人网 >编程

热点推荐