날짜/시간을 사용하여 파일을 파일 이름으로 복사하는 것은 bash에서는 작동하지만 makefile에서는 작동하지 않습니다.

날짜/시간을 사용하여 파일을 파일 이름으로 복사하는 것은 bash에서는 작동하지만 makefile에서는 작동하지 않습니다.

다음은 bash 쉘에서 작동합니다.

cp abc.tex "abc-$(date +"%Y-%m-%-d-%H-%M-%S").tex"

하지만 makefile에는 없습니다. 어떻게 해결하나요?

메이크파일은 다음과 같습니다.

b:
    cp abc.tex "abc-$(date +"%Y-%m-%-d-%H-%M-%S").tex"

"make b"를 수행하면 bash는 다음과 같이 말합니다.

cp abc.tex "abc-.tex"

답변1

Makefile에서 $(...)다중 문자 make변수의 확장을 나타냅니다. make라는 변수 가 없으므로 date +"%Y-%m-%-d-%H-%M-%S"빈 문자열로 대체됩니다.

을 사용하는 쉘이 명령 대체로 make실행되도록 하려면 다음과 같이 작성하십시오 .$(...)$$(...)

b:
        cp abc.tex "abc-$$(date +"%Y-%m-%-d-%H-%M-%S").tex"

GNU make변형에는 셸의 명령 대체와 비슷한 방식으로 작동하는 기능 make도 있습니다 .$(shell ...)

답변2

아마도 당신은 매크로를 찾고 있을 것입니다 $(shell ...).

b:
    cp abc.tex "abc-$(shell date +"%Y-%m-%-d-%H-%M-%S").tex"

그러면 다음과 같은 출력이 생성됩니다.

> make b
cp abc.tex "abc-2021-10-21-16-54-02.tex"

관련 정보