`
envy2002
  • 浏览: 152916 次
  • 性别: 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简单实例解析

    #### 实例分析 在提供的示例代码中,我们有一个简单的C语言项目结构,包括`main.c`、`mytool1.c`、`mytool1.h`、`mytool2.c`、`mytool2.h`等文件,以及一个名为`Makefile`的构建脚本。下面将逐一分析这些文件,并...

    Go-Go项目的Makefile示例

    6. 静态检查:应用静态代码分析工具,如`golint`、`staticcheck`等,确保代码质量。 7. 打包和发布:生成跨平台的可执行文件,或者打包为`tar.gz`或`zip`等格式。 一个基本的Go项目`Makefile`可能包含以下目标...

    Makefile_中文教程

    #### 四、Makefile实例分析 以下是一个简单的 Makefile 示例,展示了如何为一个包含 8 个 C 文件和 3 个头文件的工程编写 Makefile: ```makefile # 定义目标 all: program # 定义规则 program: main.o func1.o ...

    Make/Makefile使用手册

    它通过分析Makefile来确定哪些目标需要更新,并执行相应的命令。 2. **Makefile结构**:Makefile通常包含目标(target)、依赖项(dependency)和命令(command)。目标是需要构建或更新的文件,依赖项是目标文件所...

    linux的makefile文件例子

    在Linux系统中,`Makefile`是一个非常重要的工具,它帮助开发者自动化编译、链接以及执行等构建过程。...通过实践和分析"实验8_2"和"实验8_1"中的`Makefile`,开发者能深入理解自动化构建流程,提高开发效率。

    makefile 自动化变量实例

    现在,让我们分析提供的文件列表:`func.c`, `main.c`, `func.h` 和 `Makefile`。假设 `func.c` 和 `main.c` 是 C 源代码文件,而 `func.h` 是头文件,`Makefile` 用于管理编译过程。一个基本的 `Makefile` 可能如下...

    驾驭Makefile

    本文旨在深入解析Makefile的基础概念及其实现原理,并通过实例帮助读者更好地理解和应用Makefile。文章首先介绍了Makefile的基本概念——目标(target)与依赖(dependency),随后探讨了如何构建有效的Makefile规则,...

    makefile经典教程

    - **实例分析**:文中提到的文章采用了实例驱动的方式介绍makefile的编写技巧,从简单的示例入手逐步深入。 - **实例特点**:该文章与《Linux环境下的C编程指南》中关于makefile的章节相似,但通过具体实例使得概念...

    Linux_Make(Makefile)由浅入深的学习与示例剖析.doc

    以下是一个具体的Makefile实例分析,旨在帮助理解如何编写和使用Makefile。 ##### 示例代码结构 - `main.c`:主程序文件。 - `add_int.c`:整型加法实现文件。 - `add_float.c`:浮点型加法实现文件。 - `sub_int....

    跟我一起写Makefile (PDF重制版)

    - **示例**:本书提供了多个实例来帮助读者理解Makefile的编写方法。 - **make的工作原理**:解释了make工具如何读取Makefile并根据其中的规则执行相应的命令。 - **变量使用**:介绍了如何在Makefile中定义和使用...

    makefile模板

    7. **实例分析** 一个简单的 `Makefile` 模板可能如下: ```make CC = gcc CFLAGS = -Wall -g OBJS = main.o func1.o func2.o all: myapp myapp: $(OBJS) $(CC) $(CFLAGS) -o $@ $^ %.o: %.c $(CC) $...

    makefile.rar_makefile

    让我们看一个简单的Makefile实例,它定义了一个C语言项目的基本构建过程: ```makefile CC = gcc CFLAGS = -Wall OBJS = main.o util.o all: my_program my_program: $(OBJS) $(CC) $(CFLAGS) -o $@ $^ %.o: %....

    gnu_makefile_中文手册

    《GNU Makefile 中文手册》是一本针对编程者和系统管理员的重要参考资料,它详细解析了如何使用GNU make...《GNU Makefile 中文手册》正是这样的指南,提供了详细的解释和实例,帮助读者深入理解并运用这一强大的工具。

    Linux GNU Makefile中文版手册 .rar

    《Linux GNU Makefile中文版手册》详尽地阐述了以上概念,并提供了丰富的实例和技巧,帮助开发者更好地理解和使用Makefile,提升软件构建的效率和质量。通过学习这份手册,你可以掌握Makefile的精髓,无论是在个人...

    makefile_makefile_源码

    ### 实例分析 在提供的 `makefile` 示例中,可能会包括如下内容: ```makefile CC = gcc CFLAGS = -Wall OBJS = main.o utils.o all: my_program my_program: $(OBJS) $(CC) $(CFLAGS) -o $@ $^ %.o: %.c $...

    makefile 学习pdf

    通过实例分析,读者可以快速掌握makefile的编写技巧,提高自动化构建的效率。 GNU Make Manual是GNU项目官方提供的make工具指南,它详尽地解释了GNU Make的工作原理和使用方法。手册中涵盖了make的命令行选项、规则...

    Makefile 语法分析

    在这个实例中,我们将深入理解 Makefile 的基本语法,特别是变量赋值和特殊变量的使用。 首先,我们看到几个变量的定义,如 `VERSION`、`PATCHLEVEL`、`SUBLEVEL` 和 `EXTRAVERSION`,它们被用来存储软件版本的相关...

    VCS利用makefile仿真详细介绍

    3. **例化module**:在`module_tb.v`中,你需要实例化被测模块,连接初始化的信号到DUT的输入端,并将DUT的输出连接到观察变量,以便在仿真过程中检查其行为。 4. **波形输出函数$vcdpluson()`**:VCD(Value ...

    linux_makefile.rar_linux makefile

    `Makefile 结构分析.pdf`则可能专注于`Makefile`的结构设计,包括如何组织目标和规则,如何设置默认目标,以及如何使用多个`Makefile`协同工作。这份文档可能会讲解如何有效地管理大型项目中的多个源文件,以及如何...

    AVR.rar_AVR程序实例_avr程序 makefile

    总之,AVR.rar 文件提供了一个深入学习 AVR 单片机 C 语言编程和实践的好机会,通过对示例程序的分析和 makefile 的理解,开发者能够更有效地构建自己的嵌入式项目。同时,不断探索和实践是提升 AVR 开发技能的关键...

Global site tag (gtag.js) - Google Analytics