`
envy2002
  • 浏览: 150097 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

实例分析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/sh
OS=				$(shell uname -s)
CC=				g++
SVRAUTH=			FILE
SSL=				NO
NAME=				HTTPTUNNEL

LIBDIRS=			libhttptun
APPOBJS=			main.o


# Default auth settings
AUTHLIBS=

# Default SSL settings
SSLLIBS=
SSLKEY=
SSLCERT=
SSLDEPENDS=


# Server authentication settings
ifeq ($(SVRAUTH),DB)
AUTHLIBS=		-lmysqlpp
endif

# SSL settings
ifeq ($(SSL),YES)
SSLKEY=			SSLKey.pem
SSLCERT=			SSLCert.pem
SSLDEPENDS=		$(SSLKEY) $(SSLCERT)
endif


# Application name
TUNLIBNAME=		libhttptun/libhttptun.a
FDSNAME=			Firedrill
FDANAME=			firedrill
HTSNAME=			HTTPTunnel
HTANAME=			httptunnel
ifeq ($(NAME),FIREDRILL)
NAMEFLAGS=		-DSTRNAME=\"${FDSNAME}\"
APPNAME=			$(FDANAME)
else
NAMEFLAGS=		-DSTRNAME=\"${HTSNAME}\"
APPNAME=			$(HTANAME)
endif


# Build objects
TUNAPPOBJS=		$(APPOBJS)
GLOBALLIBS=		-lpthread


# Linux specific
ifeq ($(findstring Linux,$(OS)),Linux)
ifeq ($(SSL),YES)
SSLLIBS=			-lssl
endif
PLATFORMLIBS=	$(SSLLIBS)
endif

# Solaris specific
ifeq ($(findstring SunOS,$(OS)),SunOS)
ifeq ($(SSL),YES)
SSLLIBS=			-L/usr/local/ssl/lib -lssl -lcrypto -ldl
endif
PLATFORMLIBS=	$(SSLLIBS) -lsocket -lnsl -lrt
endif

# Mac OS X specific
ifeq ($(findstring Darwin,$(OS)),Darwin)
ifeq ($(SSL),YES)
SSLLIBS=			-lssl -lcrypto
endif
PLATFORMLIBS=	$(SSLLIBS)
endif

# Cygwin specific
ifeq ($(findstring CYGWIN,$(OS)),CYGWIN)
ifeq ($(SSL),YES)
SSLLIBS=			-lssl -lcrypto
endif
PLATFORMLIBS=	$(SSLLIBS)
endif


# Includes & compile flags
VERSION=			1.3.2
INCLUDES=		-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_TUN
DEBUGCFLAGS=	-g
GLOBALCFLAGS=	-Wall -DVERSION=\"$(VERSION)\" $(NAMEFLAGS) $(DEBUGCFLAGS)
CCFLAGS=			$(GLOBALCFLAGS) $(INCLUDES)
LIBS=				$(GLOBALLIBS) $(AUTHLIBS) $(PLATFORMLIBS)

# Dependencies
GLOBALDEPS=		Makefile
TUNAPPDEPENDS=	$(patsubst %.o,%.d,$(TUNAPPOBJS))
DEPENDS=			$(TUNAPPDEPENDS) $(TSTAPPDEPENDS)


#############
# Build rules
#############
#makefile程序执行的入口
# Top level
.PHONY:	all   #表明all并不是真正的文件,是个指令
all:	depend libdirs $(APPNAME) $(SSLDEPENDS)
#all 这个指令依赖 后来4个文件,或者伪指令,$(**)表示的是文件,depend,libdirs可以
#从后面判断是伪指令。

# Dependencies
include $(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) libdirs
	echo '222222\n'
	$(CC) -o $(APPNAME) $(TUNAPPOBJS) $(TUNLIBNAME) $(LIBS)
	echo '333333\n'

%.o:	%.cc $(GLOBALDEPS)
	echo 'aaaaaaa  \n'
	$(CC) -c $(CCFLAGS) $*.cc
	echo 'bbbbbb  \n'

####################
# Other useful rules
####################

.PHONY:	clean
clean:
	cd libhttptun && $(MAKE) clean
	rm -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/sh
OS=				$(shell uname -s)
CC=				g++
AR=				ar
SVRAUTH=			FILE
SSL=				NO

LIBOBJS=			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

CLIOBJS=			testcli.o
SVROBJS=			testsvr.o


# Default auth settings
AUTHOBJS=
AUTHLIBS=
AUTHINCLUDES=
AUTHFLAGS=

# Default SSL settings
SSLLIBS=
SSLINCLUDES=
SSLFLAGS=


# Server authentication settings
ifeq ($(SVRAUTH),DB)
AUTHOBJS=		DBServerAuthenticator.o DBUserDetails.o
AUTHLIBS=		-lmysqlpp
AUTHINCLUDES=	-I/usr/include/mysql -I/usr/include/mysql++
AUTHFLAGS=		-DAUTH_DB
endif

ifeq ($(SVRAUTH),FILE)
AUTHOBJS=		FileServerAuthenticator.o
AUTHFLAGS=		-DAUTH_FILE
endif

# SSL settings
ifeq ($(SSL),YES)
SSLFLAGS=		-DUSE_SSL
endif


# Application name
TUNLIBNAME=		libhttptun.a
APPCLINAME=		testcli
APPSVRNAME=		testsvr


# Build objects
TUNLIBOBJS=		$(LIBOBJS) $(AUTHOBJS)
APPCLIOBJS=		$(CLIOBJS)
APPSVROBJS=		$(SVROBJS)
GLOBALLIBS=		-lpthread


# Linux specific
ifeq ($(findstring Linux,$(OS)),Linux)
PLATFORMNAME=	LINUX
ifeq ($(SSL),YES)
SSLINCLUDES=	-I/usr/include/openssl
SSLLIBS=			-lssl
endif
PLATFORMLIBS=	$(SSLLIBS)
endif

# Solaris specific
ifeq ($(findstring SunOS,$(OS)),SunOS)
PLATFORMNAME=	SOLARIS
ifeq ($(SSL),YES)
SSLINCLUDES=	-I/usr/local/ssl/include/openssl -I/usr/local/ssl/include
SSLLIBS=			-L/usr/local/ssl/lib -lssl -lcrypto -ldl
endif
PLATFORMLIBS=	$(SSLLIBS) -lsocket -lnsl -lrt
endif

# Mac OS X specific
ifeq ($(findstring Darwin,$(OS)),Darwin)
PLATFORMNAME=	OSX
ifeq ($(SSL),YES)
SSLINCLUDES=	-I/usr/include/openssl
SSLLIBS=			-lssl -lcrypto
endif
PLATFORMLIBS=	$(SSLLIBS)
endif

# Cygwin specific
ifeq ($(findstring CYGWIN,$(OS)),CYGWIN)
PLATFORMNAME=	CYGWIN
ifeq ($(SSL),YES)
SSLINCLUDES=	-I/usr/include/openssl
SSLLIBS=			-lssl -lcrypto
endif
PLATFORMLIBS=	$(SSLLIBS)
endif


# Includes & compile flags
VERSION=			1.3.2
PLATFORM=		-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_TUN
DEBUGCFLAGS=	-g
GLOBALCFLAGS=	-Wall -DLIBVERSION=\"$(VERSION)\" $(PLATFORM) $(DEBUGCFLAGS) \
					$(AUTHFLAGS) $(SSLFLAGS)
CCFLAGS=			$(GLOBALCFLAGS) $(INCLUDES)
LIBS=				$(GLOBALLIBS) $(AUTHLIBS) $(PLATFORMLIBS)

# Dependencies
GLOBALDEPS=		Makefile
TUNLIBDEPENDS=	$(patsubst %.o,%.d,$(TUNLIBOBJS))
APPCLIDEPENDS=	$(patsubst %.o,%.d,$(APPCLIOBJS))
APPSVRDEPENDS=	$(patsubst %.o,%.d,$(APPSVROBJS))
DEPENDS=			$(TUNLIBDEPENDS) $(APPCLIDEPENDS) $(APPSVRDEPENDS)


#############
# Build rules
#############

# Top level
.PHONY:	all
all:	depend $(TUNLIBNAME)

# Dependencies
include $(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:	$(DEPENDS)

# Library
$(TUNLIBNAME):	$(TUNLIBOBJS)
	$(AR) -r $(TUNLIBNAME) $(TUNLIBOBJS)

# Test applications
.PHONY:	test
test:	$(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:	clean
clean:
	rm -f $(TUNLIBNAME) $(APPCLINAME) $(APPSVRNAME) *.o *.d
 

 

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

 

   -- makedepend main.d

echo 'depend    \n'
depend    

echo 'LIBDIRS  \n'
LIBDIRS  

make -C libhttptun
make[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.d
make[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.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Logger.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Server.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientServer.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerServer.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Sock.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TCPSock.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   UDPSock.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SSLSock.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Tunnel.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TestTunnel.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientTunnel.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TestClientTunnel.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerTunnel.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TestServerTunnel.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Tunneler.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientTunneler.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SOCKSClientTunneler.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerTunneler.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelParms.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientTunnelParms.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerTunnelParms.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TuneSettings.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Reader.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   RawReader.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SOCKSReader.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPReader.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Writer.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   RawWriter.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPWriter.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Connection.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   RawConnection.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   DummyRawConnection.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SOCKSConnection.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPConnection.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPMsg.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPRequestMsg.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPResponseMsg.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPGetMsg.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   MsgParms.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPMsgParms.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ErrorMsgParms.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AutoPtr.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelStats.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Payload.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   RawBuff.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Utils.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Time.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   URLCode.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SeqNo.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Firewall.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   MD5.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   MD4.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   DES.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   OptionsParser.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   GlobalConfig.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SideConfig.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientSideConfig.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerSideConfig.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ProxySettings.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelConfig.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelID.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelerID.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Authenticator.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientAuthenticator.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerAuthenticator.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   DefaultServerAuthenticator.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AuthDigest.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AuthSettings.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerAuthSettings.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   User.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Quotas.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectionManager.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectProxy.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   EventReceiver.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   IdentifyEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Event.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectResultEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ShutdownTunnelEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelDestroyedEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ShutdownConnectionEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ReadEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectionErrorEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelUnviableEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   MsgArrivedEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TimedEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   RawDataArrivedEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   PollTimeoutEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   CheckAckEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SendMsgEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   LeakTunnelErrorEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelStateEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectionStateEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectionManagementEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AuditEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelManagementEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   UDPSilentEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   FlushConnectionEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   LaunchServerTestEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   NewTunnelParmsEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AuthSuccessEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   NTLM.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SecurityBuff.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConfigBlob.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   GlobalConfigBlob.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientConfigBlob.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerConfigBlob.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunClientConfigBlob.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunServerConfigBlob.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunClient.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunServer.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TCPSockTunServer.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   UDPSockTunServer.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TCPSockTunClient.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   UDPSockTunClient.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunCallback.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunHandle.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientSockTunHandle.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerSockTunHandle.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AddrInfo.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ThreadManager.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Thread.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Callback.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Mutex.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   MutexVar.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConditionVar.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   FileServerAuthenticator.cc
ar -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.o
make[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.cc
echo 'bbbbbb  \n'
bbbbbb  

echo '222222\n'
222222

g++ -o httptunnel main.o libhttptun/libhttptun.a -lpthread   -lsocket -lnsl -lrt
echo '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

 

 

 
分享到:
评论

相关推荐

    Makefile 语法分析

    makefile 实例分析 Makefile 语法分析 第一部分 VERSION = 2# 给变量VERSION赋值 PATCHLEVEL = 6# 给变量PATCHLEVEL赋值 SUBLEVEL = 22# 给变量SUBLEVEL赋值 EXTRAVERSION = .6# 给变量EXTRAVERSION赋值 NAME = ...

    Makefile入门与提高

    Makefile入门与提高,该文档详细分析了makefile文件的语法,并提供大量的实例

    Linux窗口程序设计-Qt4精彩实例分析_源代码

    实例源代码 第1章:基本对话框; 第2章:布局管理; 第3章:对话框进阶; 第4章:QMainWindow; 第5章:图形与图画;... Makefile文件(Makefile、Makefile.Release) 可执行文件 ui文件(如需要)

    Linux窗口程序设计—Qt4精彩实例分析配书光盘_QT4源码及动态库(Linux+windows)

    源码中提供的两个Makefile文件,其中Makefile在Linux环境下使用,Makefile.Release为Windows环境下使用的Release版本,也可利用.pro文件自行生成Makefile文件。   有关本书的意见反馈和咨询可发送电子邮件至:cj@...

    深入浅出嵌入式Linux应用程序开发MP4视频.zip

    shell编程实例分析。 linux应用程序设计基础-GCC编译器。 linux应用程序设计基础-GDB调试器。 linux应用程序设计基础-Makefile。 linux文件编程基础-系统调用。 linux文件编程实例分析-系统调用。 linux文件编程基础...

    LINUX系统分析与高级编程技术、makefile、gcc、gdb.rar

    引言 本书说明Unix系统的程序设计界面—系统调用界面和标准C提供的很多函数。这些对编写在Unix系统中运行的程序是非常有帮助...该手册没有给出实例,也不说明这些界面和函数设计的合理性,而这些则正是本书所要弥补的。

    arp(地址解析协议)实例示范

    arp(地址解析协议)实例示范, 含发送和接收,在linux下跑通,带makefile,可用来学习理解arp协议

    嵌入式系统开发基础——基于ARM微处理器和Linux操作系统[滕英岩][习题解答]

    3.6.3 Linux下字符型设备驱动程序实例分析 习题 第4章 MiniGUI应用程序设计 4.1 嵌入式GUI概述 4.2 常用嵌入式GUI介绍 4.3 MiniGUI概述 4.4 MiniGUI的编译和安装 4.5 MiniGUI程序框架 4.6 MiniGUI编程基础 ...

    《Android系统源代码情景分析》

    3.1.2 应用实例分析 3.2 强指针和弱指针 3.2.1 强指针的实现原理分析 3.2.2 弱指针的实现原理分析 3.2.3 应用实例分析 第2篇 Android专用驱动系统 第4章 Logger日志系统 4.1 Logger日志格式 4.2 ...

    Android系统源代码情景分析-罗升阳-源码

    3.1.2 应用实例分析 3.2 强指针和弱指针 3.2.1 强指针的实现原理分析 3.2.2 弱指针的实现原理分析 3.2.3 应用实例分析 第2篇 Android专用驱动系统 第4章 Logger日志系统 4.1 Logger日志格式 4.2 Logger日志...

    精通WindowsAPI 函数 接口 编程实例

    3.3.2 Makefile实例 50 3.3.3 注释 50 3.3.4 宏 50 3.3.5 描述块:目标、依赖项和命令 53 3.3.6 makefile预处理 55 3.3.7 在Platform SDK的基础上使用nmake 56 3.4 使用WinDbg调试 57 3.4.1 安装...

    精通Windows.API-函数、接口、编程实例.pdf

    3.3.2 Makefile实例 50 3.3.3 注释 50 3.3.4 宏 50 3.3.5 描述块:目标、依赖项和命令 53 3.3.6 makefile预处理 55 3.3.7 在Platform SDK的基础上使用nmake 56 3.4 使用WinDbg调试 57 3.4.1 安装...

    嵌入式Linux程序设计案例与实验教程-实例代码

    4.7.3 OSS驱动分析94 4.7.4 OSS用户空间编程95 实验4.7 Linux音频OSS驱动实验95 综合实验三五子棋游戏的实现97 第5章 嵌入式Linux开源软件移植与应用101 5.1 嵌入式WebServer GoAhead的移植与应用101 ...

    郭天祥ARM9视频教程(第13和20讲均可观看).docx

    4. 交叉编译实例分析 第八讲 Windows平台工具使用 1. SecureCRT的安装使用 2. Notepad++的使用 3. ADS集成开发环境的安装 4. HJTAG工具的使用 5. USB驱动的安装 6. 使用USB下载程序 第四部分 嵌入式硬件 第九讲 ARM9...

    iOS应用逆向工程:分析与实战

    分析与实战是iOS应用逆向工程方面的权威著作,三位作者都是iOS领域内的专家,拥有扎实的理论知识和丰富的实践经验。本书内容以工具+代码的形式全面、系统地展开知识点,由浅入深,图文并茂地带着读者一步步探索常规...

    ARM9嵌入式Linux开发 ppt——周卫老师

     介绍交叉编译工具的选项以及基本的MakeFile语法。 ARM汇编程序设计基础  GPIO接口  NAND Flash控制器、存储控制器和内存管理单元MMU  中断体系结构  系统时钟和定时器  通用异步收发器UART  I2C...

    嵌入式Linux C编程入门(第2版) PPT

    2.2.3 vi的使用实例分析 40 2.3 嵌入式linux编译器gcc的使用 41 2.3.1 gcc概述 41 2.3.2 gcc编译流程分析 42 2.3.3 gcc警告提示 45 2.3.4 gcc使用库函数 47 2.3.5 gcc代码优化 49 2.4 嵌入式...

Global site tag (gtag.js) - Google Analytics