Linux Makefile写法及问题程序说明

问题描述:
源文件:
main.cpp: 主程序,包含dictionary.h
dictionary.h:字典类实现,包含hashset.h和hashset.cpp(hashset用模板,所以也包含.cpp)
hashset.cpp hashset.h:模板实现hash类

$vi Makefile
mainapp:hashset.o dictionary.o
  g++ hashset.o dictionary.o -o mainapp
hashset.o:hashset.h
  g++ -g -c hashset.cpp hashset.h -o hashset.o
dictionary.o:dictionary.h
  g++ -g -c dictionary.h -o dictionary.o
clean:
  rm -rf *.o mainapp

$make 后错误提示为:  
g++ hashset.o dictionary.o -o mainapp
hashset.o: file not recognized: File format not recognized
collect2: ld returned 1 exit status
make: *** [mainapp] Error 1  

直接用g++ 编译连接 $ g++ -g -o main main.cpp dictionary.h hashset.h ,会提示找不到dictionary类对象相关的错误。
希望高人给于指导意见!

作者: hitulric   发布时间: 2011-05-01

$ g++ -g -o main main.cpp dictionary.h hashset.h

怎么没.c文件呢

作者: Esperantor   发布时间: 2011-05-01

g++ hashset.o dictionary.o -o mainapp
-->让编译器编译.o文件,不行啊。
$ g++ -g -o main main.cpp dictionary.h hashset.h
-->你的实现文件呢?只有一个main.cpp?其它的呢?

PS:编译多个源文件时,可直接写实现文件,即.c或.cpp文件,.h就不要了。

作者: subfate   发布时间: 2011-05-01