Hi Weijun,
On Thu, 2006-08-10 at 07:17 -0500, Weijun Guo wrote:
> Hi, Valeriy,
>
> I have the test files on my root package as well. I tried the following
> two options with no success:
I'm only commenting on Cygwin, as I have little experience with the MSVC-ROOT combo.
> 1. using cygwin make facility.
Which ROOT did you use for that? The GCC compiled, or the MSVC compiled version. They are separate downloads from the ROOT web-pages.
If you're using the GCC compiled version, the Makefile should look like any other standard Makefile for a POSIX system:
CPPFLAGS = -I$(shell root-config --incdir)
CPP = g++ -E
CXXFLAGS =
CXX = g++ -c
LDFLAGS = -L$(shell root-config --libdir)
LD = g++
SOFLAGS =
SO = g++ -shared
ROOTCINT = $(shell root-config --bindir)/rootcint
%.o:%.cxx
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $<
%.so:%.o %Dict.o
$(SO) $(SOFLAGS) -o $@ $^
%Dict.h:%Dict.cxx
@if test -f $@ ; then : ; else rm -f $< ; $(MAKE) $< ; fi
%Dict.cxx:%.h
$(ROOTCINT) -f $@ -c $(CPPFLAGS) $^
all: Foo.so
clean:
rm -f Foo.so Foo.o FooDict.o FooDict.cxx FooDict.h
If you're using the MSCV, the compiler is called `CL.EXE'. First of all, make sure that that program is in the path of your Cygwin shell. Usually, it lives in something like
c:\Program Files\Microsoft Visual Studio\VC98\Bin
so you should add that directory to the PATH evironment variable. Do something like
export PATH=${PATH}:`cygpath -u 'c:\\Program\ Files\\Microsoft\ Visual\ Studio\\VC98\\bin'`
Similarly, you should make sure that the INC and LIB environment variables are set correctly in the Cygwin shell. Also make sure that the path to ROOT is in the PATH environment variable. Usually it's something like
export ROOTSYS=`cygpath -u c:\\root`
export PATH=${PATH}:${ROOTSYS}/bin
Now, the compiler `CL.EXE' does not accept the same command line options as GCC (or any other Un*x compiler for that matter), so the Makefile needs to be a little different. To complicate things even further, the act of making a DLL requires some additional information - namely what symbols to export. So a Makefile could look like
INC_PATH = $(shell root-config --incdir);$(INC)
LIB_PATH = $(shell root-config --libdir);$(LIB)
CXX = CL.EXE /C
CXXFLAGS = /GX
SO = CL.EXE /DLL
SOFLAGS =
%.obj:%.cxx
INC=$(INC_PATH) $(CXX) $(CXXFLAGS) $<
%.dll:%.o %Dict.o
$(SO) $(SOFLAGS) -o $@ $^
%Dict.h:%Dict.cxx
@if test -f $@ ; then : ; else rm -f $< ; $(MAKE) $< ; fi
%Dict.cxx:%.h
$(ROOTCINT) -f $@ -c $(CPPFLAGS) $^
all: Foo.dll
clean:
rm -f Foo.dll Foo.obj FooDict.obj FooDict.cxx FooDict.h
Note, that I haven't tried this, so you may need to adjust it a bit.
My suggestion would be to use the GCC compiled ROOT.
Yours,
--
___ | Christian Holm Christensen
|_| | -------------------------------------------------------------
| | Address: Sankt Hansgade 23, 1. th. Phone: (+45) 35 35 96 91
_| DK-2200 Copenhagen N Cell: (+45) 24 61 85 91
_| Denmark Office: (+45) 353 25 404
____| Email: cholm_at_nbi.dk Web: www.nbi.dk/~cholm
| |
Received on Thu Aug 10 2006 - 16:33:43 MEST
This archive was generated by hypermail 2.2.0 : Mon Jan 01 2007 - 16:32:00 MET