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