날짜/시간을 사용하여 파일 이름으로 파일 복사는 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"

관련 정보