0

これは私のような初心者にとっては簡単な質問ですが、次のようにするにはどうすればよいですか

all: run
run:
        DIR=bin/
        $(CC) $(LIBRARY) $(INCLUDE) run.o -o $(DIR)$@

ありがとう。

4

2 に答える 2

1

なぜこのように行かないのですか?

DIR=bin/
all: $(DIR)/run
$(DIR)/run:
        $(CC) $(LIBRARY) $(INCLUDE) run.o -o $@
于 2013-07-23T02:25:28.497 に答える
0

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}以前に設定された値から展開されます。もちろん、中括弧は省略できます。

ただし、BeSerKによる回答は、おそらくあなたが探しているものです。

于 2013-07-23T02:51:33.117 に答える