ターゲット同士で依存関係を持つことがある。
例えば、Aを生成して、それが出来たらAを利用してBを生成など。
- 自動化のためのGNU Make入門講座 - Makefileの基本:ルール
ターゲット同士の依存関係を見て、処理を切り替えたりできる。
ターゲット: 依存するターゲット ターゲットを生成するためのコマンド 依存ターゲット: 依存ターゲットを生成するためのコマンド
簡単に言うと、最初にターゲットをやるわけだが、依存ターゲットファイルが存在しない場合は、依存ターゲットファイルのルールを先に実行し、その後ターゲットファイルのルールを実行。
存在する場合は、ターゲットファイルのルールだけを実行となる。
Makefileで、
とする。
Makefile以外存在しない場合は、
$ ls Makefile $ make echo "echo ABC" >> first.sh echo "echo ABC" >> last.sh echo "echo XYZ" >> last.sh $ ls Makefile first.sh last.sh $ cat first.sh echo ABC $ cat last.sh echo ABC echo XYZ $
こうなる。
どちらも生成される。
first.sh, last.shのどちらも存在しているなら、
$ make make: `last.sh' is up to date. $
こう出る。
last.shの更新が最新かどうかを見てる。
last.shを削除してからmakeすると、
$ rm last.sh $ ls Makefile first.sh $ make echo "echo XYZ" >> last.sh $ ls Makefile first.sh last.sh $ cat first.sh echo ABC $ cat last.sh echo XYZ $
こうなる。
last.shの生成は行われるが、first.shは存在するので、first.shの生成処理の時に実行されていた、
echo "echo ABC" >> last.sh
がないために、
$ cat last.sh echo XYZ $
こうなっている。
まあ、first.shの生成でlast.shをいじるのはどうかとおもうが。
こういうことがあるので、依存関係は複雑。
ただ、途中までmakeしていると、その分だけmakeは不要となる。
整合性は取れなくなるが。
(なので個人的にall cleanからのmakeがおすすめ。)
Sample/make/target/dependency/src/target at master · bg1bgst333/Sample · GitHub