次の簡略化されたメイクファイルがあり、さまざまなターゲットに基づいてさまざまなパスを設定しようとしています。残念ながら、期待した結果が得られません。これはmakeバージョン3.81です。
.SECONDEXPANSION:
all: Debug32
# Object directory set by target
Debug32: OBJDIR = objdir32
#OBJDIR = wrongdirectory
# ObjDir is empty here. :(
OBJS = $(addprefix $(OBJDIR)/,DirUtil.o)
$(OBJDIR)/%.o : %.cpp
echo Compile: $@
Debug32: $(OBJS)
$(OBJS): | $(OBJDIR)
$(OBJDIR):
echo mkdir $(OBJDIR) - $@
OBJDIR を設定しない場合の結果は次のとおりです。
echo Compile: /DirUtil.o
「OBJDIR = wrongdirectory」行のコメントを外すと、次の結果が得られます。これは、変数の両方の値が表示されるため、混乱します。
echo mkdir objdir32 - wrongdirectory -
echo Compile: wrongdirectory/DirUtil.o
変数が展開されるべきだと思うときに変数が展開されていないと仮定していますが、この動作を変更する方法がわかりません。