title: makefile implicit rule -- confused
body: <p>I am working on a project where makefile is used to make an target.
  Here i am confused how makefile is generating .o files from the .cpp file.</p>
  
  <p>Like file clientthread_level1_unix.o have to be generated from clientthread_level1_unix.cpp file.
  But no where it is specified to use *.cpp file for it.</p>
  
  <pre><code>EXTRALIBS = -pthread -lz -ldl -lm
  OPENGLLIBS =
  LDFLAGS_GL =
  LDLIBS = ${APPEXTRALIBS} ${top_builddir}/lib/libwx_based-2.6.a ${EXTRALIBS}
  
  # Compiler used
  CXX         = c++
  CC          = gcc
  
  CANALOBJS =     ../../common/listenthread_unix.o ../../common/clientthread_level1_unix.o ../../common/devicethread_unix.o \
          ../../common/canalshmem_level1_unix.o ../../common/clientlist.o ../../common/controlobject.o \
          ../../common/devicelist.o ../../common/udpreceivethread_unix.o ../../../vscp/common/vscp.o \
          ../../common/clientthread_level2_unix.o ../../common/canalshmem_level2_unix.o \
          ../../common/tcplistenthread.o
  CANALHDRS = ../../common/clientlist.h ../../common/controlobject.h ../../common/devicelist.h \
          ../../common/canal.h ../../common/canaldlldef.h \
          ../../common/version.h ../../common/canal_unix_ipc.h ../../common/CanalShMem_level1_unix.h \
          ../../common/CanalShMem_level2_unix.h ../../common/clientthread_level1_unix.h ../../common/clientthread_level2_unix.h
  PROJOBJS    = ../../../common/dllist.o ../../../common/configfile.o ../../../common/crc.o
  PROJHDRS    = ../../../common/dllist.h ../../../common/configfile.h
  OBJS        = canald.o
  HDRS        = canald.h
  
  
  all:        canald
  
  # Build the Linux executable
  canald:     $(OBJS) $(HDRS) $(CANALOBJS) $(CANALHDR) $(PROJOBJS) $(PROJHDRS)
          $(CXX) $(OBJS) $(CANALOBJS) $(PROJOBJS) -o canald $(LIBS) $(LDLIBS)
  </code></pre>
  
  <p>If we use the Implicit rule then also, then also <strong>canald</strong> target is not as per that.
  <a href="http://www.gnu.org/software/make/manual/make.html#make-Deduces" rel="nofollow">http://www.gnu.org/software/make/manual/make.html#make-Deduces</a>
  <a href="http://www.gnu.org/software/make/manual/make.html#Implicit-Rules" rel="nofollow">http://www.gnu.org/software/make/manual/make.html#Implicit-Rules</a></p>
  
  <p>Please sugest how is this line working to produce <strong>canald</strong> ?</p>
  
  <pre><code>    $(CXX) $(OBJS) $(CANALOBJS) $(PROJOBJS) -o canald $(LIBS) $(LDLIBS)
  </code></pre>