2010-12-02 2 views
1

내 프로젝트는 외부 공급 업체의 정적 라이브러리 libext.a을 사용합니다. 라이브러리는 모든 프로젝트 개발자간에 공유되는 중앙 위치에 유지됩니다 (central/). 라이브러리의 각 업데이트 된 릴리스에 따라 central/libext.a.1, central/libext.a.2, central/libext.a.3,symlink check-symlink-times을 사용하지 않고 Makefile의 전제 조건

의 접미사가있는 새 파일이 추가됩니다

프로젝트의 Subversion 저장소는 라이브러리의 최신 버전을 가리키는 기호 링크 libext.a을 포함합니다 (central). 새 버전이 추가 될 때마다 링크가 변경되어 저장소에 커밋됩니다.

링크가 변경되고 작업 복사본이 업데이트 된 후 프로젝트를 다시 컴파일 할 때 make은 링크 대상의 수정 시간을보고 링크 자체의 수정 시간 (libext.a)이 아닌 것이 문제입니다. 따라서 컴파일 된 프로젝트에서 사용 된 라이브러리는 여전히 이전 버전입니다.

내가 GNU 링크의 대상 및 링크 자체 모두의 수정 시간에 make 보이게 버전 3.81 이후을 확인 에서 사용할 수있는 -L/--check-symlink-times 플래그의 알고 있지만, 내 프로젝트는 버전 3.80, 및 업그레이드를 사용 많은 컴퓨터에서 컴파일이 지원되어야하기 때문에 매우 어려울 것입니다. 그 중 일부는 제어 할 수 없습니다.

make의 이전 버전에서이 새 플래그의 동작을 에뮬레이션하는 가장 간단한 방법은 무엇입니까? make을 실행하기 전에 실행해야하는 스크립트 나 명령 줄 옵션을 지정하지 않아도 특정 Makefile에 로컬로 구현할 수있는 스크립트를 선호합니다. 완전히 받아 들일 수는 없지만 그렇습니다.

답변

0

내가 지금까지 함께 왔어요 가장 좋은 방법은 libext.a를 필요로하는 메이크의 요구 사항으로 libext.a.timestamp를 추가하고, 전제 조건으로 libext.a이 포함 된 규칙의 전제 조건으로 추가하는 것입니다.

%.timestamp 
    touch [email protected] 

가 지금은 링크가 업데이트 될 때마다 타임 스탬프를 접촉 할 수있는 방법을 찾을 필요가 :

또한, 나는 규칙을 추가했다. 불행히도, 나는 아직 이것을 할 방법을 찾지 못했습니다 (SVN에 post-updated hook이 없음).

1

아마도 here에 기술 된 것과 같은 것을 사용할 수 있습니다. 이는 타임 스탬프가 변경되는 것보다는 파일 체크섬이 변경 될 때 gmake를 다시 작성하는 트릭입니다.