[Rd] Problem creating Makefile.win to build package using Visual C++
cstrato
cstrato at aon.at
Sun Mar 2 23:02:04 CET 2008
Dear all,
For testing purposes I have created a package "MyClass" containing C++
classes, which runs "R CMD check" on MacOS X and Linux w/o warnings. Now
I want to create a Windows binary using MS Visual C++.
Using the "Makefile.win" shown below, I can compile the source code with
Visual C++ using:
>NMAKE /f "Makefile.win" CFG="Release"
However, when I modified the $(MYDLL) part to include "MyClass.def", and
did:
>R CMD INSTALL -l C:/home/CRAN/myRlib MyClass_0.3.2.tar.gz
I got the build error:
---------- Making package MyClass ------------
adding build stamp to DESCRIPTION
installing NAMESPACE file and metadata
running src/Makefile.win ...
Makefile.win:3: *** missing separator. Stop.
make[2]: *** [srcDynlib] Error 2
make[1]: *** [all] Error 2
make: *** [pkg-MyClass] Error 2
I have tried the following modification to include "MyClass.def":
$(MYDLL): $(MYOBJ) $(RLIB) $(MAINR).def
$(LD) $(SOFLAGS) $(LDFLAGS) $(MYOBJ) $(OutPutOpt)$@
Please can someone tell me what might be wrong?
I know from the readme file that I need to do something like:
link /dll /def:mypkg.def /out:mypkg.dll *.obj Rdll.lib
but it is not clear to me how to convert this example to my makefile?
Thank you in advance
Best regards
Christian
_._._._._._._._._._._._._._._._
C.h.i.s.t.i.a.n S.t.r.a.t.o.w.a
V.i.e.n.n.a A.u.s.t.r.i.a
e.m.a.i.l: cstrato at aon.at
_._._._._._._._._._._._._._._._
Makefile.win (adapted from another program):
!IF "$(CFG)" != "Release" && "$(CFG)" != "Debug"
!MESSAGE Invalid configuration "$(CFG)" specified.
!ENDIF
ObjSuf = obj
SrcSuf = cxx
ExeSuf = .exe
DllSuf = dll
OutPutOpt = -out:
# Win32 system with Microsoft Visual C/C++
!include <win32.mak>
CC = $(cc)
CXX = $(cc)
CXXFLAGS = $(cvarsdll) -EHsc -nologo -GR -DWIN32 \
-DVISUAL_CPLUSPLUS -D_WINDOWS
LD = $(link)
!IF "$(CFG)" == "Release"
CXXOPT = -O2 -MD
LDOPT = -opt:ref
!ELSEIF "$(CFG)" == "Debug"
CXXOPT = -Z7 -MDd
LDOPT = -debug
!ENDIF
!if ("$(_NMAKE_VER)" == "8.00.50727.42") || ("$(_NMAKE_VER)" ==
"8.00.50727.762") || ("$(_NMAKE_VER)" == "9.00.21022.08")
MT_EXE = mt -nologo -manifest $@.manifest -outputresource:$@;1
MT_DLL = mt -nologo -manifest $@.manifest -outputresource:$@;2
EXTRAFLAGS = -D_CRT_SECURE_NO_DEPRECATE
!else
MT_EXE =
MT_DLL =
EXTRAFLAGS = -G5
!endif
LDFLAGS = $(LDOPT) $(conlflags) -nologo
SOFLAGS = $(dlllflags:-pdb:none=)
#------------------------------------------------------------------------------
R_HOME = C:\\PROGRA~1\\R\\R-2.6.2
R_INCLUDES = $(R_HOME)\\include
RLIB = $(R_HOME)\\src\\gnuwin32\\Rdll.lib
#------------------------------------------------------------------------------
MAIN = MyClassA
MAINR = MyClass
MYHDR = $(MAIN).h rwrapper.h
MYOBJ = $(MAIN).$(ObjSuf) rwrapper.$(ObjSuf)
MYSRC = $(MAIN).$(SrcSuf) rwrapper.$(SrcSuf)
MYDLL = $(MAINR).$(DllSuf)
OBJS = $(MYOBJ)
PROGRAMS = $(MYDLL)
all: $(PROGRAMS)
$(MYDLL): $(MYOBJ)
$(LD) $(SOFLAGS) $(LDFLAGS) $(MYOBJ) $(OutPutOpt)$@
$(MT_DLL)
$(MAIN).$(ObjSuf): $(MYHDR)
.$(SrcSuf).$(ObjSuf):
$(CXX) $(CXXFLAGS) $(EXTRAFLAGS) $(CXXOPT) -c $<
clean:
@del *.obj *.def *.exp *.d *.log .def *.pdb *.ilk *.manifest
distclean: clean
@del *.exe *.ps *.lib *.dll
More information about the R-devel
mailing list