带pthread的Makefile无法在多个版本中正确编译

时间:2019-03-11 07:06:34

标签: c++ makefile pthreads makefile-errors

对于一个项目,我必须为源代码创建一个简单的makefile,其中包括pthreads和命令行参数(如果需要的话)。

无效的makefile的第一个版本是这样的:

 mr: mr.o
    g++ -std=c++11 -pthread mr.o -o mr
 mr.o: mapred.cc
    g++ -std=c++11 -pthread -c mapred.cc
 clean:
    rm *.o mr

,我收到以下错误消息:目标文件不存在? enter image description here

因此,我决定翻转一下前两个语句:

mr.o: mapred.cc
   g++ -std=c++11 -pthread -c mapred.cc 
mr: mr.o
   g++ -std=c++11 -pthread mr.o -o mr 
clean:
   rm *.o mr

它可以编译吗?我在终端中得到的就是:

g++ -std=c++11 -pthread -c mapred.cc

,仅此而已。当查看创建了哪些文件时,我看到的只是创建了一个新文件mapred.o,但没有可执行文件。因此没有错误,但没有完全完成。如果你们有任何帮助我的提示,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

如果未使用LinearLayout选项指定显式输出名称,则编译器将使用与源文件相同的名称命名目标文件,但后缀为ll

在您的情况下,命令

RecyclerView

将创建一个名为-o的对象文件。

在目标名称和链接时使用.o,或使用g++ -std=c++11 -pthread -c mapred.cc 选项:

mapread.o

关于第二个问题,除非调用mapread.o时指定了明确的目标,否则它将仅使用 first 目标,而不会使用其他任何目标。