Você pode querer usar o chamado arquivo de resposta do compilador, que é muito comum em MS toolchains . Aparentemente, versões recentes do GCC também o suportam (consulte manual ).
CXX = g++
CPPFLAGS = -I/path1 -I/path2 -DFLAG
CXXFLAGS = -g -Wall
CXXOPTS = $(CURDIR)/cxx.opts
%.o: %.cpp $(CXXOPTS)
$(CXX) @$(CXXOPTS) -c -o $@ $<
$(CXXOPTS):
echo "$(CPPFLAGS) $(CXXFLAGS)" >$@
clean:
rm -f *.o
rm -f $(CXXOPTS)
Sessão de amostra:
$ touch a.cpp b.cpp c.cpp
$ make a.o b.o c.o
echo "-I/path1 -I/path2 -DFLAG -g -Wall" >cxx.opts
g++ @cxx.opts -c -o a.o a.cpp
g++ @cxx.opts -c -o b.o b.cpp
g++ @cxx.opts -c -o c.o c.cpp
$ make clean
rm -f *.o
rm -f cxx.opts