GNU make忽略了隐式规则

时间:2015-06-21 14:24:21

标签: c++ makefile

我正在尝试使用隐式规则使用GNU make编译一些C ++源代码,这是我的Makefile的内容:

%.o: %.cpp
    g++ -o $@ $<

make

的输出
make: *** No targets.  Stop.

运行make -d并不是很有帮助(我不会发布除了显然无用之外非常详细的输出)。该文件夹不为空。

2 个答案:

答案 0 :(得分:4)

您告诉Make如何构建.o个文件,但您没有告诉它:

  • 构建任何.o个文件;
  • 要构建的.o个文件;
  • 之后如何处理这些.o文件。

规则并不意味着,在没有参数的情况下调用时,将编译当前目录中的所有.cpp个文件或其他文件。

这一条规则还不够。

答案 1 :(得分:1)

您告诉make如何从相应的.o文件创建任意.cpp个文件,但您没有告诉它要创建哪些文件。

类比:我告诉你,比方说,制作USB棒,你需要塑料,内存芯片和USB-A插头(现在你知道如何创建任何 USB棒) 。但我并没有说哪个 USB坚持创建。这正是这里发生的事情。

要解决您的问题,您可以通过调用makemake asdf.o说创建(例如)“asdf.o”,并且很乐意这样做,使用{{1} }。 您还可以添加(事实上的标准g++ -o asdf.o asdf.cpp目标,如下所示:

all

由于第一个目标是默认目标,因此调用all: asdf.o fdsa.o [you get it] 相当于调用make,后者又需要“asdf.o”和“fdsa.o”,它们将按照描述创建上方。