Makefile : make 변수를 사용하여 복사-> error; 변수 없이는 그렇지 않습니다!


1

다음 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

왜 그래야만하지?

답변:


2

실행 make -n되는 명령을 보거나 make옵션없이 실행하고 실행 된 명령을보십시오. 이렇게하면 이미 귀하의 질문에 대답했을 것이며, 그렇지 않은 경우 우리는 어떻게되는지 알 수 있습니다.

보여지는 조각에서 쉘 변수를 할당하고 나중에 make 변수를 사용하려는 것 같습니다. 그래서 TargetLocation것으로 보인다 make반면, 변수 ActualFilePath="$<"쉘에 대한 의미 명령 것으로 보인다.

파일의 나머지 부분에 따라 다음과 같이 작동 할 수 있습니다.

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

2
$(InterimFile1)또한 가변적입니다. 나는 make로 변환되어 쉘로 전달 되면 $$(InterimFile1)이것이 잘못 될 것이라고 생각 합니다 . 그리고 쉘 의 경우 변수 대체 방법이 올바르지 않습니다. $$(InterimFile1)$(InterimFile1)$(InterimFile1)
— Nikhil

1
오타가 유감입니다. 그래도 도움이 필요하면 문제를 노출시키고 질문에 포함시키는 최소한의 완전한 makefile을 만드십시오.
— RalfFriedl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.