GNU会产生意外行为

时间:2012-08-13 12:42:10

标签: gcc makefile gnu-make

我希望make在跟踪标题更改的目录中构建所有.cpp。我尝试首先使gcc输出一个带有-MM选项的依赖项的目标,然后将该主体追加到实际调用该编译的目标:

OPTIONS = -std=c++11 -Wall

export

all : $(patsubst %.cpp, %.o, $(wildcard *.cpp))


%.o : %.mkt
    make -f $*.mkt

%.mkt : %.cpp
    gcc $(OPTIONS) -MM $*.cpp > $&.mkt1
    echo gcc $(OPTIONS) -c %.cpp > $*.mkt2
    cat $*.mkt1 $*.mkt2 > $*.mkt

然而,不知何故,这个脚本发出了表单的调用

g++ -c -o something.o something.cpp

目录中的每个.cpp文件。不会创建临时文件.mkt1.mkt2.mkt。为什么会这样?我如何实现理想的行为?我在mingw的窗户上这样做。

1 个答案:

答案 0 :(得分:2)

您提供了两个模式规则链(%.cpp - > %.mkt%.mkt - > %.o),但Make已经有一个隐式规则(%.cpp - > %.o)在搜索构建something.o的方法时,它会首先找到。

解决问题的最简单方法是使用make -r(或make --no-builtin-rules)来禁用内置隐式规则。