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);

관련 정보