c++ - makefile can't find .o file -


i'm working on simple makefile using implicit rules, , not understanding how make deciding execution order. when have makefile setup this, says can't find wave.o:

cxx = g++  audiosample: wave.o audiosample.o      $(cxx) -o audiosample audiosample.o wave.o  audiosample.o: wave.h pcadpcm.h     $(cxx) -c audiosample.cpp  wave.o: wave.h 

terminal output:

g++ -o audiosample audiosample.o wave.o g++: error: wave.o: no such file or directory make: *** [audiosample] error 1 

however when change order of targets works fine:

audiosample: wave.o audiosample.o      $(cxx) -o audiosample audiosample.o wave.o  wave.o: wave.h  audiosample.o: wave.h pcadpcm.h     $(cxx) -c audiosample.cpp 

terminal output:

g++    -c -o wave.o wave.cpp g++ -c audiosample.cpp g++ -o audiosample audiosample.o wave.o 

whats problem??

double-check tabs vs spaces in makefile.

for example vim editor, can search tabs /\t or add following config:

" in ~/.vimrc listchars=tab:»»,trail:·,nbsp:~ set list 

you have hidden tab in wave.o rule (shown in editor):

wave.o : wave.h »»»»»» 

this tab breaks implicit rules generate wave.o. remove tabs , fine second makefile there no room tab target last line of file.

for information, wave.h prerequisite , not used make guess source file name (wave.cpp in case). wave.o : wave.cpp wouldn't have helped.


Comments

Popular posts from this blog

android - MPAndroidChart - How to add Annotations or images to the chart -

javascript - Add class to another page attribute using URL id - Jquery -

firefox - Where is 'webgl.osmesalib' parameter? -