0

我想通过跟踪标头更改在目录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 在 Windows 上执行此操作。

4

1 回答 1

2

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

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

于 2012-08-13T13:39:24.710 回答