Makefile:使用 make 变量复制 --> 错误;没有变量就不是这样!

Makefile:使用 make 变量复制 --> 错误;没有变量就不是这样!

在下面的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);

相关内容