当前位置: 技术问答>linux和unix
Linux Makefile写法及问题程序说明
来源: 互联网 发布时间:2016-11-26
本文导语: 问题描述: 源文件: 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++ ha...
问题描述:
源文件:
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类对象相关的错误。
希望高人给于指导意见!
源文件:
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类对象相关的错误。
希望高人给于指导意见!
|
首先我已经很久没碰过C++了,很多语法问题我都忘了。
记得模板是要放到.h文件中。
下面说说我的使用makefile的经验:
对应的.h有对应的.c(或.cpp,下面省略),编译直接使用.c文件不用.h。
你编译时提示:
g++ hashset.o dictionary.o -o mainapp
hashset.o: file not recognized: File format not recognized
是说hashset.o文件格式不能被识别。不过我试过,g++可以编译(或许不能叫“编译”).o文件。
对于模板,我没试过。
对于前面错误的观点,还请见谅。
记得模板是要放到.h文件中。
下面说说我的使用makefile的经验:
对应的.h有对应的.c(或.cpp,下面省略),编译直接使用.c文件不用.h。
你编译时提示:
g++ hashset.o dictionary.o -o mainapp
hashset.o: file not recognized: File format not recognized
是说hashset.o文件格式不能被识别。不过我试过,g++可以编译(或许不能叫“编译”).o文件。
对于模板,我没试过。
对于前面错误的观点,还请见谅。
|
g++ hashset.o dictionary.o -o mainapp
-->让编译器编译.o文件,不行啊。
$ g++ -g -o main main.cpp dictionary.h hashset.h
-->你的实现文件呢?只有一个main.cpp?其它的呢?
PS:编译多个源文件时,可直接写实现文件,即.c或.cpp文件,.h就不要了。
-->让编译器编译.o文件,不行啊。
$ g++ -g -o main main.cpp dictionary.h hashset.h
-->你的实现文件呢?只有一个main.cpp?其它的呢?
PS:编译多个源文件时,可直接写实现文件,即.c或.cpp文件,.h就不要了。
|
$vi Makefile
mainapp:hashset.o
g++ hashset.o -o mainapp
hashset.o:
g++ -g -c hashset.cpp -o hashset.o
clean:
rm -rf *.o mainapp
dictionary.h
不用生成.o了