2013-09-25 3 views
0

다른 사람이 작성한 패키지가 있습니다. 해당 패키지의 파일을 변경할 수 없습니다. 해당 패키지에서이 같은 규칙을 Makefile을있다 : 나는 GNU 대신 .o 인 같은 파일 목록에서 이진의 라이브러리를 구축하는 메이크 주위에 "래퍼"를 만들어 쓰고 싶은GNU make : 다른 규칙의 전제 조건을 상속합니다

$(BIN)/progA: <long list of .o files> 
    $(LINK.cc) $^ -o [email protected] 

. 이상적으로 나는 이런 식으로 뭔가를하고 싶습니다 : 물론

include package/Makefile 

$(LIB)/progA.so: <magically copy the prerequisites for $(BIN)/progA> 
    $(LD) -shared $(LDFLAGS) $^ $(LIBS) -o [email protected] 

, 난 그냥 내에 패키지의 메이크 파일에서 목록을 n은 붙여 넣기 - 복사 할 수 있지만, 패키지는 자주 업데이트됩니다; 내 빌드 프로세스가 자동으로 마술 파일의 패키지 변경 사항에 대한 변경 사항을 선택하는 경우 선호합니다.

내 유일한 해결책은 뭔가 복잡한 것입니다 : sed 또는 awk 또는 perl을 사용하여 패키지의 Makefile을 검사하고 .o 파일 목록을 꺼내 래퍼 작성 파일의 변수에 할당하십시오. 할 수만 있으면 그걸 피하고 싶습니다.

첫째, 같은 실행 뭔가 :

make -n bin/progA LINK.cc='OBJECTS:' | grep ^OBJECTS: 

다음 출력을 캡처

+0

패키지가 자주 업데이트되는 경우 기능 요청을 제출하여 개체 파일을 규칙에 하드 코딩하는 대신 OBJS 변수에 넣습니다. – Kaz

+0

> * 다른 사람이 작성한 패키지가 있습니다. 해당 패키지의 파일을 변경할 수 없습니다. * 이 요구 사항은 현실적이지 않습니다. 자신의 컴퓨터와 파일 사본이 있으면 원하는대로 할 수 있습니다. 패치를 적용하고 자신 만의 지점을 유지 관리하는 저장소로 가져올 수 있습니다. – Kaz

답변

0

나는 당신이 개 아이디어를 가지고있다. 결과에서 손으로 -o 등을 제거해야합니다.

다른 생각은 "make -pn"을 실행하여 make의 데이터베이스 복사본을 얻고 grep 또는 그 밖의 것으로 구문 분석합니다.

메이크 파일을 직접 사용하는 것의 이점은 make가 직접 변수를 확장한다는 것입니다.

+0

감사합니다, Mad. 귀하의 솔루션이 작동하고, 그것을 사용하고 있습니다. –

+0

솔루션에 만족하는 경우 옆에있는 체크 표시를 클릭하여 동의하십시오. – MadScientist

관련 문제