[英]GNU make unexpected behaviour
我希望make
在跟踪标题更改的目录中构建所有.cpp
。 我试图通过首先使用-MM
选项使gcc输出具有依赖关系的目标,然后将主体追加到将实际调用编译的目标来实现:
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的窗户上这样做。
您所提供的两种模式规则链( %.cpp
- > %.mkt
, %.mkt
- > %.o
),但让已经有一个隐含规则( %.cpp
- > %.o
),它将首先,找到一种构建something.o
。
解决问题的最简单方法是使用make -r
(或make --no-builtin-rules
)来禁用内置的隐式规则。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.