Re: GNU Make - Problem defining pattern rules

Manuel Collado <[email protected]> Thu, 29 Apr 2010 13:24:52 +0200
Newsgroups gmane.comp.gnu.utils
Organization RedIRIS
Message-ID <[email protected]>
Dave escribió:
> ...
> When I execute:
> make src/application/SampleApplication
> 
> I see  "Building a Binary"
> 
> When I execute
> make src/libraries/PluginOne/libPluginOne.so
> 
> I see "make: Nothing to be done for `src/libraries/PluginOne/
> libPluginOne.so'."
> 
> Can anyone explain why the pattern rule for the binary appears to
> work, but the pattern rule for a .so library doesn't?

After expanding the variable values and stripping down the file paths,
it seems that the relevant part of your Makefile can be reduced to:

%.so: %.o
         @echo "Building a Library"

libPluginOne.so: PluginOne.o ...

The last, explicit rule doesn't match the first, implicit rule (note the 
'lib' prefix), and contains no actions, so ... "Nothing to do ..."

> ...
> ----------------------------------------------------------
> # Some Pattern Rules
> #
> %.o: %.cpp
>         @echo "Building Object Files"
> 
> %.so: %.o
>         @echo "Building a Library"
> 
> %: %.o
>         @echo "Building a Binary"
> 
> .SUFFIXES: .so
> 
> # Some variables to hold data
> #
> PROGRAMS     :=
> LIBRARIES    :=
> SOURCES      :=
> 
> # Build the first binary
> #
> local_bin       := src/application/SampleApplication
> local_src       := src/application/SampleApplication.cpp src/
> application/MessagePrinter.cpp
> local_objs      := $(subst .cpp,.o,$(local_src))
> 
> PROGRAMS        += $(local_bin)
> SOURCES         += $(local_src)
> 
> $(local_bin): $(local_objs)
> 
> 
> # Build the first library
> #
> local_lib       := src/libraries/PluginOne/libPluginOne.so
> local_src       := src/libraries/PluginOne/PluginOne.cpp src/libraries/
> PluginOne/HelperClass.cpp
> local_objs      := $(subst .cpp,.o,$(local_src))
> 
> LIBRARIES       += $(local_lib)
> SOURCES         += $(local_src)
> 
> $(local_lib): $(local_objs)
> -------------------------------------------------------------

-- 
Manuel Collado - http://lml.ls.fi.upm.es/~mcollado