这是我第一次编写makefile。这不起作用(例如,如果我修改ClientSocket.cc它只是说“uptodate”。如果我运行make myprog也会引发很多依赖错误)。你能告诉我这有什么问题吗? 谢谢
myprog: myprog.o Client.o ClientSocket.o Socket.o
g++ -Wall -g Socket.o ClientSocket.o Client.o myprog.o -o myprog
myprog.o: myprog.cc
g++ -Wall -g -c myprog.cc
Client.o: Client.cc Client.h
g++ -Wall -g -c Client.cc
ClientSocket.o: ClientSocket.cc ClientSocket.h
g++ -Wall -g -c ClientSocket.cc
Socket.o: Socket.cc Socket.h
g++ -Wall -g -c Socket.cc
运行make myprog时的错误:
cc mprog.o -o myprog
myprog.o: In function `std::__verify_grouping(char const*, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
myprog.cc:(.text+0xe): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::size() const'
还有很多其他人。喜欢:
myprog.cc:(.text+0x1a4): undefined reference to `std::cout'
myprog.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
答案 0 :(得分:2)
确保使用制表符缩进命令行(无法判断您是否来自帖子,因为它们可能会转换为空格。)
修改强>:
从cc
行和错误消息中,看起来make正在使用其implicit rule进行链接,完全忽略了您提供的链接(第一个)。我在makefile中看不到会导致这种情况的任何内容。还有一些事情需要检查:
make Client.o
并查看它们是否有效。Makefile
我知道这些建议就像技术支持,询问您的计算机是否已插入,但一切看起来都很好。我甚至复制了它,修复了空白,然后在我的机器上运行它。一切似乎都有效。
答案 1 :(得分:0)
它看起来不像makefile问题(因为正在调用编译器)。它看起来像是一个C ++源代码问题。
具体来说,您似乎错过了定义#include
标题的myprog.cc
中的std::basic_string
。
您是否尝试过直接执行编译器命令而不使用make,以查看源代码是否正确编译?
<强>附录强>
运行make
时,您的包含路径可能会有所不同。 make
有一个调试/跟踪选项可以转储它的所有宏(但我不记得它是什么东西),这可能会有所帮助。
答案 2 :(得分:0)
您是否使用大写M命名文件“Makefile”?
您也可以尝试运行make -d
来获取一些调试信息。