Makefile:make変数を使用してコピー-->変数が存在しないとエラーが発生します。

Makefile:make変数を使用してコピー-->変数が存在しないとエラーが発生します。

次のメイクファイルから

InputLocation:=./Test
OutputLocation:=$(InputLocation)/Output
Input:=$(wildcard $(InputLocation)/*.md)
Output:=$(patsubst $(InputLocation)/%, $(OutputLocation)/%, $(Input:Input=Output))

.PHONY: all
all: $(Output)

$(OutputLocation)/%.md : $(InputLocation)/%.md
    cp -rf $< $@;
    ActualFilePath="$<"
    InterimFile1Path="$@"
    #cp -rf $(ActualFilePath) $(InterimFile1Path);

cp -rf $< $@;ファイルが正常にコピーされました。

cp -rf $(ActualFilePath) $(InterimFile1Path)エラーが発生しましたが、cp: missing file operand

なぜですか?

答え1

make -n実行するコマンドを表示するには、実行するか、makeオプションなしで実行して実行されるコマンドを確認してください。そうすることであなたの質問に答えることができ、そうでない場合は何を期待するべきかを知ることができます。

示したスニペットを見ると、シェル変数を割り当ててから、make変数を使用したいようです。だから私は変数TargetLocationのように見え、シェルのためのコマンドのようです。makeActualFilePath="$<"

ファイルの残りの部分に応じて、次のように動作できます。

ActualFilePath="$<"; \
InterimFile1="tempHTML.md"; \
InterimFile1Path="$(TargetLocation)/$${InterimFile1}" ; \
cp -rf $${ActualFilePath} $${InterimFile1Path};

編集する

ルールのインデント部分では、make変数を代入する代わりにシェルコマンドを指定します。

これは働きます:

$(OutputLocation)/%.md : $(InputLocation)/%.md
    cp -rf $< $@;
    ActualFilePath="$<"; \
    InterimFile1Path="$@"; \
    cp -rf $${ActualFilePath} $${InterimFile1Path}

これはまた働きます:

ActualFilePath="$<"
InterimFile1Path="$@"
$(OutputLocation)/%.md : $(InputLocation)/%.md
    cp -rf $(ActualFilePath) $(InterimFile1Path);

関連情報