这个makefile有什么问题?

时间:2010-09-21 22:23:13

标签: makefile

这是我第一次编写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

3 个答案:

答案 0 :(得分:2)

确保使用制表符缩进命令行(无法判断您是否来自帖子,因为它们可能会转换为空格。)

修改

cc行和错误消息中,看起来make正在使用其implicit rule进行链接,完全忽略了您提供的链接(第一个)。我在makefile中看不到会导致这种情况的任何内容。还有一些事情需要检查:

  1. 尝试输入其他规则,例如make Client.o并查看它们是否有效。
  2. 检查所有文件是否在当前目录中,并且makefile名为Makefile
  3. 同样,我确信这只是帖子中的格式,但是你的第一条规则比其他规则缩进了一个空格。你说你检查了一下,我相信你,但我真的看不出其他任何错误。
  4. 我知道这些建议就像技术支持,询问您的计算机是否已插入,但一切看起来都很好。我甚至复制了它,修复了空白,然后在我的机器上运行它。一切似乎都有效。

答案 1 :(得分:0)

它看起来不像makefile问题(因为正在调用编译器)。它看起来像是一个C ++源代码问题。

具体来说,您似乎错过了定义#include标题的myprog.cc中的std::basic_string

您是否尝试过直接执行编译器命令而不使用make,以查看源代码是否正确编译?

<强>附录

运行make时,您的包含路径可能会有所不同。 make有一个调试/跟踪选项可以转储它的所有宏(但我不记得它是什么东西),这可能会有所帮助。

答案 2 :(得分:0)

您是否使用大写M命名文件“Makefile”?

您也可以尝试运行make -d来获取一些调试信息。