在下面的makefile中
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
不带选项运行并查看已执行的命令。这样做可能已经回答了您的问题,如果没有,我们也可以知道会发生什么。
从您显示的片段来看,您似乎想要分配 shell 变量,然后使用 make 变量。 soTargetLocation
似乎是一个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);