makefile 2
time_list_a.txt と time_list_b.txt を stamp_list.txt を作成するために必要な中間ファイルとする。
より複雑で多様なファイルを扱う場合を想定。
stamp_list.txt は time_a_*.txt, time_b_*.txt との更新日時を比較する。
下記の場合、time_a_*.txt か time_b_*.txt のどれか一つでも更新されれば time_list_a.txt, time_list_b.txt の両方の中間ファイルを作成してしまう。
time_a_*.txt だけの更新なら time_list_a.txt だけ生成したいが、どうやればいいのやら。
中間ファイルを削除しても、stamp_list.txt が time_a_*.txt, time_b_*.txt より新しければ make しなくて良いわけで。
time_list_*.txt をターゲットに入れると、これらの中間ファイルのどちらかでも削除すると、stamp_list.txt を更新しようとしてしまうので厄介。
どうすれば良いの??????
############## # makefile ############## # マクロ STAMP_LIST = stamp_list.txt TIME_LIST_A = time_list_a.txt TIME_LIST_B = time_list_b.txt TIME_A_1 = time_a_1.txt TIME_A_2 = time_a_2.txt TIME_B_1 = time_b_1.txt TIME_B_2 = time_b_2.txt TIME_A = $(TIME_A_1) $(TIME_A_2) TIME_B = $(TIME_B_1) $(TIME_B_2) # all : list @echo exec all list : $(STAMP_LIST) @echo exec list $(STAMP_LIST) : $(TIME_A) $(TIME_B) @echo exec $^ in $@ :> $(TIME_LIST_A) cat $(TIME_A) >> $(TIME_LIST_A) :> $(TIME_LIST_B) cat $(TIME_B) >> $(TIME_LIST_B) :> $(STAMP_LIST) @echo $^ >> $(STAMP_LIST) cat $(TIME_LIST_A) >> $(STAMP_LIST) cat $(TIME_LIST_B) >> $(STAMP_LIST)