Make

Makefile:使用 make 變數複製 –> 錯誤;沒有變數就不是這樣!

  • September 16, 2018

在以下生成文件中

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

為什麼會這樣?

執行make -n以查看將要執行的命令,或者在make沒有選項的情況下執行並查看已執行的命令。這樣做可能已經回答了你的問題,如果沒有,它會讓我們知道會發生什麼。

從您顯示的片段中,您似乎想要分配 shell 變數,然後使用 make 變數。所以TargetLocation似乎是一個make變數,而ActualFilePath="$<"似乎是一個用於 shell 的命令。

根據文件的其餘部分,這可能有效:

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

編輯

在規則的縮進部分,您不是分配make變數,而是指定 shell 命令。

這應該有效:

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

這也應該有效:

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

引用自:https://unix.stackexchange.com/questions/469379