makefile 编译或者链接问题

发布于 2022-10-15 07:59:51 字数 7664 浏览 35 评论 0

未命名.jpg (16.79 KB, 下载次数: 10)

下载附件

目录

2011-05-03 21:11 上传


这是我的文件的目录
我写的makefile如下:
#VPATH=$(srcdir)(objdir)(header):.
src=$(wildcard $(srcdir)/*.cpp)
object=$(patsubst $(srcdir)/%.cpp,$(objdir)/%.o,$(src))
srcdir=./source
objdir=./object
hderdir=./header
CXX=g++
CXXFLAGS=-Wall -c -O3 -Iheader
a.out(objdir) $(object)
        $(CXX) $(object)
$(objdir):
        mkdir -p ./object
$(object)(src)
        $(CXX) $(CXXFLAGS) $< -o $@

ls(objdir)
        echo $(object)




#main.o:%o:%cpp
#        $(CXX) $(CXXFLAGS) $<
#Point.o:%o:%cpp
#        $(CXX) $(CXXFLAGS) $<
#Circle.o:%o:%cpp
#        $(CXX) $(CXXFLAGS) $<
#Cylinder.o:%o:%cpp
#        $(CXX) $(CXXFLAGS) $<
clean:
        $(RM) $(object)
        $(RM) a.out
        rmdir ./object



一共是两个版本,注释掉的部分是我把所有文件放在同一个目录下时写的,编译运行都通过了。
但是按照头文件和源文件分类放了之后,可以编译生成.o文件但是链接就不行了。
报错内容是找不到   运算符重载<<
如下:
g++ ./object/Circle.o ./object/Cylinder.o ./object/main.o ./object/Point.o
./object/Cylinder.o: In function `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Circle&':
Circle.cpp.text+0x70): multiple definition of `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Circle&'
./object/Circle.o:Circle.cpp.text+0x70): first defined here
./object/main.o: In function `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Circle&':
Circle.cpp.text+0x70): multiple definition of `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Circle&'
./object/Circle.o:Circle.cpp.text+0x70): first defined here
./object/Point.o: In function `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Circle&':
Circle.cpp.text+0x70): multiple definition of `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Circle&'
./object/Circle.o:Circle.cpp.text+0x70): first defined here
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o: In function `_start':
(.text+0x1: undefined reference to `main'
./object/Circle.o: In function `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Circle&':
Circle.cpp.text+0x8a): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Point&'
./object/Cylinder.o: In function `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Circle&':
Circle.cpp.text+0x8a): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Point&'
./object/main.o: In function `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Circle&)':
Circle.cpp.text+0x8a): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Point&)'
./object/Point.o: In function `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Circle&)':
Circle.cpp.text+0x8a): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Point&)'
collect2: ld returned 1 exit status

源文件没有问题,不知道我的makefile错在什么地方?请高手赐教。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文