Reputation: 13486
I want make
to build all .cpp
in the directory with tracking header changes. I attempt to do it by first making gcc output a target with dependencies with -MM
option and then append the body to that target that will actually call the compilation:
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
Yet somehow this script issues the calls of the form
g++ -c -o something.o something.cpp
for each .cpp
file in the directory. The temporary files .mkt1
, .mkt2
and .mkt
are not created. Why does this happen? How do i achive desired behaviour? I'm doing this on windows with mingw.
Upvotes: 0
Views: 128
Reputation: 99094
You have supplied a chain of two pattern rules (%.cpp
->%.mkt
, %.mkt
->%.o
), but Make already has a single implicit rule (%.cpp
->%.o
) which it will find first, when searching for a way to build something.o
.
The simplest way to solve the problem is to use make -r
(or make --no-builtin-rules
) which will disable the built-in implicit rule.
Upvotes: 2