2011-06-25 10 views
2

以下は、私が抱えている問題を説明するために作成されたメークファイルです。Makefile変数の展開

release: TYPE := release 
FILE = main.cpp 
OBJDIR = dist/$(TYPE) 
OBJS = $(patsubst %.cpp,$(OBJDIR)/%.o,$(FILE)) 

release: $(OBJS) 
    @echo "just created: " $(OBJS) 

%.o: 
    @echo "create [email protected]" 

私は実行出力は「はリリースが作る」:

create dist//main.o 
just created: dist/release/main.o 

私は、リリース対象の$(OBJS)依存性は、/リリース/ main.oをDISTに拡張されていることを確認するにはどうすればよいとdist // main.oではありません。 dist // main.oに展開する理由は何ですか?

答えて

2

dist//main.oに拡張した理由は、TYPEがターゲット固有の変数であるためです。この種類の変数の値は、ターゲットのレシピ(および他のターゲット固有の割り当て)のコンテキスト内でのみ利用可能です。
これは、そのルールの前提条件でTYPEの値が空であることを意味します。

+0

ありがとうございます。ターゲット固有の変数がターゲットレシピ内でのみ有効であることを認識していません。私はmakefileを再検討し、解決策を考え出しました。 – dbotha

関連する問題