我有一个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”目标,但接着尝试创建另一个对象。
答案 0 :(得分:0)
GNU make有一堆内置的implicit rules,当Makefile没有给出任何方法时,它会用来尝试创建一个目标。
在您的情况下,"链接单个目标文件的规则"正在调用以从queue
创建queue.o
,因为您没有明确地在Makefile中提供任何规则。该规则运行链接器,默认情况下假定为/usr/bin/ld
。