5

マクロ呼び出しで使用できるようにするパターン ルールを作成しようとしています%が、期待した結果が得られません。

パターンルール:

%.o: %.cpp $(%_H)
    g++ -o $@ $(FLAGS) -c $<

問題は $(%_H) にあります

何らかの理由%で、定義されているものに拡張されていません。

依存関係リストを印刷すると($^)、ソース ファイルのみが印刷されます。

使用したい依存関係を設定する非常にクリーンな方法があります。

# Header Dependencies per object 
Geometry_H:=Geometry.h $(Error_H) 
Enemy_H:=Enemy.h $(Geometry_H) $(Error_H) 
Surface_H:=Surface.h $(Geometry_H) 
Player_H:=Player.h $(Geometry_H) $(Surface_H) 
SDLWindow_H:=SDLWindow.h $(Surface_H) $(Error_H) 
Path_H:=Path.h $(Geometry_H) $(Error_H) 
Territory_H:=Territory.h $(Geometry_H) 
Board_H:=Board.h $(Territory_H) $(Geometry_H) $(Player_H) $(Path_H) $(Enemy_H) $(Error_H) 
Error_H:=Error.h 
Diminisher_H:=Diminisher.h $(SDLWindow_H) $(Geometry_H) $(Surface_H) $(Board_H) $(Error_H) 
Main_H:=$(Diminisher_H)

別の人は、これらの変数を依存関係リストに変更することを提案しました。

つまり Main_H:=$(Diminisher_H)

Main.o になります: $(Diminisher_H)

これは良い修正です、うまくいきます。$(%_H)ただし、何らかの理由で無効であるという問題がまだ残っています。

(可能であれば)有効な式にする方法を知りたいです。

$( $%_H )$( $(%)_H )$( $(value %)_H )およびその他多くのことを試しました。%マクロ呼び出しでは意味を失っているようです。

%マクロ呼び出しで使用する方法はありませんか?

4

1 に答える 1

4

Either use secondary expansion:

.SECONDEXPANSION:

%.o: %.cpp $$($$*_H)
    g++ -o $@ $(FLAGS) -c $<

Or (IMO, better) use dependency auto-generation:

于 2012-06-03T11:57:28.257 に答える