여기 내 Makefile의 두 대상이 있습니다. Makefile의 경로 종속성
.SECONDARY:
exp-%.ans:
echo $* > eval/[email protected]
%.scores: %.ans
cat eval/$< > eval/[email protected]
내가 make -n exp-40.scores
출력이 될 것이다 쓰기
echo 40 > eval/exp-40.ans
cat eval/exp-40.ans > eval/exp-40.scores
. 종속성이 이미 보유되었음을 인식하지 못합니다. eval/exp-40.scores (처음으로)를 만들면 동일한 명령을 실행하면 make가 이미 거기에 있다고 말할 것입니다. 그래서 이렇게 내 Makefile을 변경하려고 :
.SECONDARY:
exp-%.ans:
echo $* > eval/[email protected]
%.scores: eval/%.ans
cat eval/$< > [email protected]
내가 다시 make -n exp-40.scores
를 작성하고 출력 될 때 : 완전히 잘못
echo eval/40 > eval/eval/exp-40.ans
cat eval/eval/exp-40.ans > exp-40.scores
을 내 매개 변수를 평가하지 40분의 40해야하기 때문이다.
나는 어떻게이 두 세계에서 최고의 것을 얻을 수 있습니까? 즉, eval/폴더에 * .scores를 만들고 싶습니다. 나는 또한 파일이 이미 존재하는지 여부를 확인하기 위해 make를 원한다. 그런 다음 make는 해당 파일의 존재에 따라 진행해야합니다.
감사합니다.
처음에 답변과 설명을 해주셔서 감사합니다. Makefile의 특성을 담은 튜토리얼이 필요합니다. 이것에 대해 아는 것이 있습니까? 웹에 짧은 튜토리얼이 많이 있는데, 그 목적에는 빠르고 더러운 일을하기위한 팁과 트릭이 있습니다. 나는 (그리고 나는 확실하지 않다) make의 문서화는 좋지 않고 많은 버그가있다. Make (http://shop.oreilly.com/product/9780596006105.do)에 대한 O'Reilly의 책이 있지만 등급은 평균입니다. – Thorn
실례지만, 두 가지 더 묻고 싶습니다. (1) .SECONDARY를 제거하면, make는이 경우에 매우 중요한 내 중간 파일을 삭제합니다. .SECONDARY, .INTERMEDIATE 및 .PRECIOUS에 대한 섹션을 읽었으나 어느 것이이 경우에 적합한 지 이해하지 못합니다. (2) 그리고 .SECONDARY는 그 아래 모든 목표에 영향을 미칩니 까? – Thorn
GNU 매뉴얼이 나쁘지는 않다. 나는 그 안에 어떤 버그도 모르고있다. _ 그러나, GNU 웹 사이트의 매뉴얼 버전은 GNU make의 최신 안정 버전을 설명합니다. 이전 버전을 사용하는 경우 설명서의 일부 문구가 해당 버전에 적합하지 않습니다.혼란을 피하기 위해 사용하고있는 GNU 버전과 같은 버전의 매뉴얼을 읽어야합니다. 이 매뉴얼은 GNU make와 함께 패키지되어 있으므로, 패키지를 만들 때와 같은 위치에서 해당 버전의 올바른 문서를 얻을 수 있어야합니다. – MadScientist