为什么调用make“target”导致一个额外的命令而不是调用“target.o”

时间:2017-12-21 09:13:53

标签: makefile

我有一个makefile规则,如下所示:

queue.o: queue/queue.cpp
     g++ -Wall -g -c queue/queue.cpp

当我调用“make queue”时,它运行命令导致queue.o但它也运行另一个命令

g++   queue.o   -o queue
/usr/bin/ld: cannot open output file queue: Is a directory
问题是。为什么在没有扩展名的情况下调用时会运行额外的命令?它显然知道要调用哪个命令,因为它匹配“queue”到“queue.o”目标,但接着尝试创建另一个对象。

1 个答案:

答案 0 :(得分:0)

GNU make有一堆内置的implicit rules,当Makefile没有给出任何方法时,它会用来尝试创建一个目标。

在您的情况下,"链接单个目标文件的规则"正在调用以从queue创建queue.o,因为您没有明确地在Makefile中提供任何规则。该规则运行链接器,默认情况下假定为/usr/bin/ld