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.