[PD-dev] makefile template

Patrice Colet colet.patrice at free.fr
Tue Oct 18 05:01:09 CEST 2011


Hello,

It's difficult to follow, let me try to explain why...

----- Mail original -----
> De: "Hans-Christoph Steiner" <hans at at.or.at>
> À: "IOhannes m zmoelnig" <zmoelnig at iem.at>
> Cc: "pd-dev" <pd-dev at iem.at>
> Envoyé: Lundi 17 Octobre 2011 18:33:45
> Objet: Re: [PD-dev] makefile template
> 
> 
> On Oct 17, 2011, at 12:08 PM, IOhannes m zmoelnig wrote:
> 
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> >
> > On 2011-10-17 17:11, Patrice Colet wrote:
> >> Hello IOhannes,
> >>
> >> all I could say is this:
> >>
> >> $ make -p -n | grep CXX
> >> make: *** No targets specified and no makefile found.  Stop.
> >> LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
> >> COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
> >> CXX = g++
> >
> > what do you mean by that?
> > why does it mean that you have to manually add a "CXX=g++" line to
> > your
> > Makefile?

no it just mean that g++ is the default compiler assigned to CXX variable in my environment,
implicitly set by make as you mentioned below, maybe I misunderstood your question in precedent mail.

> > here (on linux), i get approximately the same.
> > note that there is a line "CXX = g++" is the following output,
> > though
> > this is set implicitely by make and not explicitely in the
> > makefile.
> >
> 
> MinGW does not include a 'cc.exe' only a 'gcc.exe'.  CC defaults to
> 'cc', so for what we are doing, it makes sense to do CC=gcc.  It
> looks
> like MinGW's default CXX is g++ and MinGW includes a 'g++.exe' so
> there is no need to set CXX in the Makefile.
> 


Yes indeed, I've commented out CC=gcc for having compilation running fine.

> >> There another thing very unlikely in template/Makefile, if do a
> >> 'make clean', it removes all the sources as well as objects and
> >> binaries
> >> so for not loosing sources I have to remove these lines:
> >>
> >> -rm -f -- $(SOURCES:.cpp=.o) $(SOURCES_LIB:.cpp=.o) $
> >> (SHARED_SOURCE:.cpp=.o)
> >> -rm -f -- $(SOURCES:.cpp=.$(EXTENSION))
> >
> >
> > then you did something weird :-)
> > i had the same problem after changing CC to CXX and replacing
> > myobject.c
> > with myobject.cpp
> >
> > the template/Makefile is full of assumptions that the sources end
> > with
> > ".c"; to compile .cpp files, you will have to replace all the
> > pattern
> > substitutions throughout the makefile from %.c to %.cpp
> > mainly you will find this in constructs like "$(SOURCES:.c=.o)"
> > which
> > need to be changed to "$(SOURCES:.cpp=.o)"
> 

that's what I did, after changing all .c to .cpp and CC to CXX it compiles.

> 
> 
> Yes, that's what's causing everything to get deleted.  Basically
> ".c=.o" means replace a ".c" ending with ".o".  If there isn't a ".c"
> ending, it just passes the values thru unchanged.  Since the
> myobject.cpp doesn't end in ".c", it passes thru unchanged, and
> therefore 'make clean' is deleting myobject.cpp rather than
> myobject.o.
> 

that's right, if I replace .c with .cpp in clean method, make doesn't remove .cpp files anymore,
but it still removes the .tcl files

so I come with another question :D

how .tcl files could remain after clean method?

Also I still have same question about pd includes, but more accurately...

gui externals needs m_imp.h, because of this:

    sys_vgui("eval [read [open {%s/%s.tcl}]]\n",
             proll_class->c_externdir->s_name,
			 proll_class->c_name->s_name);
    sys_vgui("::patco::proll::setup %s\n", proll_receive_symbol->s_name);


c_externdir->s_name and c_name->s_name are declared in m_imp.h
but it's not in pd/include, there only is m_pd.h.

So do I have to add this file to my project or, do I have to modify the Makefile to look for it?
For the moment I keep a copy of m_imp.h in my project it's easier to handle ^^.

I will send a message to pd-list when the external will be ready for a test on other platforms,
this one might be worth to be included into pdx distribution.







More information about the Pd-dev mailing list