2013-03-28 2 views
2

다음은 내가 데 문제의 단순화 메이크입니다 : 내가 만들어 실행하면make가 상대 경로 이름 의존성이 절대 경로 대상으로 동일하다는 것을 깨닫지 못하고

all: /tmp/makey/../filey 
    @echo All done 
/tmp/filey: 
    @echo Filey 

는 말한다 :

make-3.79.1-p7 : * 대상을 만들 규칙이 없습니다. 모두 '입니다. 중지.

분명히 /tmp/makey/../filey가/tmp/filey와 동일하다는 것을 알지 못합니다. 내가 어떻게이 일을 할 수있는 아이디어가 있니?

감사

챠오 - GNU의 무랄리

답변

4

최신 버전은 동일한 문자열로 경로를 해결하기 위해 당신이 당신의 전제 조건 및 대상에 적용 할 수있는 $(abspath ...)$(realpath ...) 기능을합니다. 이러한 이름을 직접 작성한 경우 (예 : $(PREFIX)/../filey) $(dir $(PREFIX))filey을 대신 사용할 수 있습니다.

그 외에도이 문제를 해결할 방법이 없습니다. make는 타겟에서 문자열 매칭을 사용하고 문자열이 동일하지 않으면 일치하지 않는다. (간단한 접두사를 무시하는 특별한 경우가있다. ./) make가이 구분을 이해했다 할지라도 (각 타겟 이름에 abspath 자체를 적용함으로써) 예를 들어 상징적 인 링크에도 불구하고 여전히 도움이되지 않습니다.

유일한 "실제"대답은 make가 자신의 경로 이름을 참조하지 않고 파일에 대해 이야기 할 수있는 기본 파일 시스템 (예 : 장치 ID 및 inode)을 이해하는 것입니다. 그러나 이렇게하는 make와 같은 휴대용 프로그램에서는 문제가 있습니다.

+0

답장을 보내 주셔서 감사합니다. 예, 도움이됩니다. gnu 버전 3.81 이후 버전에서는 이러한 옵션을 지원합니다. 불행히도 우리 IT 부서는 서둘러 그 버전으로 넘어갈 것으로 보이지 않습니다. 그래서 나는 3.79와 붙어있다. 이 문제를 어떻게 해결할 수 있는지 알아 보겠습니다. 당신의 도움을 주셔서 감사합니다. – user2221763

+1

글쎄요, 3.79.1은 2000 년에 출시되었습니다. 13 년은 IT 부서에 충분해야합니다 ... – MadScientist