これは私のような初心者にとっては簡単な質問ですが、次のようにするにはどうすればよいですか
all: run
run:
DIR=bin/
$(CC) $(LIBRARY) $(INCLUDE) run.o -o $(DIR)$@
ありがとう。
これは私のような初心者にとっては簡単な質問ですが、次のようにするにはどうすればよいですか
all: run
run:
DIR=bin/
$(CC) $(LIBRARY) $(INCLUDE) run.o -o $(DIR)$@
ありがとう。
なぜこのように行かないのですか?
DIR=bin/
all: $(DIR)/run
$(DIR)/run:
$(CC) $(LIBRARY) $(INCLUDE) run.o -o $@
DIR
書かれているように、 1 つのコマンド ラインでシェル変数に割り当てられます。次の行には、make
変数の展開がありますDIR
。2 つの行が異なるシェルによって実行され、いずれにせよ、シェルを実行する前にmake
展開され、変数ではないため、これは機能しません。$(DIR)
DIR
make
次のように機能させることができます。
all: run
run:
DIR=bin/; \
$(CC) $(LIBRARY) $(INCLUDE) run.o -o $${DIR}$@
バックスラッシュは、2 行が 1 行として扱われることを意味します (セミコロンが必要なほどです)。$${DIR}
表記は to で展開さmake
れ${DIR}
(より正確には に$$
展開され$
、はmake
無視されます{DIR}
)、シェルは${DIR}
以前に設定された値から展開されます。もちろん、中括弧は省略できます。