我希望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的窗户上这样做。
答案 0 :(得分:2)
您提供了两个模式规则链(%.cpp
- > %.mkt
,%.mkt
- > %.o
),但Make已经有一个隐式规则(%.cpp
- > %.o
)在搜索构建something.o
的方法时,它会首先找到。
解决问题的最简单方法是使用make -r
(或make --no-builtin-rules
)来禁用内置隐式规则。