次のメイクファイルがあります。
all: a.out b.out
.PHONY: gen_hdr1
gen_hdr1:
#call script 1 that generates x.h
rm a.o #try to force rebuild of a.cpp
.PHONY: gen_hdr2
gen_hdr2:
#call script 2 that generates x.h
rm a.o #try to force rebuild of a.cpp
b.out: gen_hdr2 a.o
g++ -o b.out a.o
a.out: gen_hdr1 a.o
g++ -o a.out a.o
*.o : *.cpp
g++ -c $< -o $@
a.cpp includex xh
私がしたいこと:
- ao が存在する場合は削除する
- アプリ A の xh を生成する
- a.cpp をコンパイルする
- アプリ A をビルドする
- ao が存在する場合は削除する
- アプリ B の xh を生成する
- a.cpp を再度コンパイルする
- アプリ B をビルドする
makefile を実行した結果は次のとおりです。
#call script 1 that generates x.h
rm -f a.o #try to force rebuild of a.cpp
g++ -c -o a.o a.cpp
g++ -o a.out a.o
#call script 2 that generates x.h
rm -f a.o #try to force rebuild of a.cpp
g++ -o b.out a.o
g++: a.o: No such file or directory
g++: no input files
make: *** [b.out] Error 1
基本的に、アプリ B のビルド時には ao は見つかりません。make システムに強制的に再構築させるにはどうすればよいですか?