2011-01-21 2 views
1

내 응용 프로그램 개발에 사용하는 라이브러리 세트가 있습니다. 응용 프로그램을 빌드 할 때마다 모든 라이브러리가 다시 작성됩니다. 나와 팀 팀은 실제로 라이브러리를 반복해서 만들 필요가 없다고 생각합니다.라이브러리 만 빌드하는 makefile을 작성하는 방법은 무엇입니까?

모든 라이브러리와 응용 프로그램을 독립적으로 만드는 makefile은 어떻게 만들 수 있습니까? 제 말은, 앱을 만들 때 이미 구축 된 모든 라이브러리를 작성하지 않으려합니다.

의견을 제안하십시오.

편집 : 설명 : 내 응용 프로그램은 xyz라고하고 모든 소스 파일은 ./src/xyz 디렉토리에 있습니다. ssh 및 net-snmp와 같은 라이브러리에 따라 다릅니다. 그리고 net-snmp와 ssh는 ./lib 디렉토리에 저장됩니다.

이제 앱이 빌드 될 때마다 모든 라이브러리가 다시 빌드됩니다. 여기에서는 내 앱에 필요한 라이브러리 패키지를 수정하지 않습니다.

빌드하는 데 거의 시간이 걸립니다. 각 빌드에서 라이브러리는 다시 빌드되며 필수 사항은 아닙니다.

지금, 내 질문은 무엇입니까? 라이브러리와 앱을 별도로 빌드하는 makefile을 작성하려면 어떻게해야합니까?

+4

어떻게 당신이 당신의 종속성을 정의는? 소스가 변경된 경우에만 라이브러리를 다시 빌드해야합니다. – chrisaycock

+5

해결책은 실행 파일을 소스 코드 대신 빌드 된 라이브러리에 의존하게 만드는 것입니다. 지금하고있는 일을 알기 위해 makefile의 일부를 게시하십시오. – Apalala

+0

@ : 내 질문을 편집하고 시나리오를 설명했습니다. –

답변

0

당신은 우리에게 상세한 대답을 줄 수있는 거의 충분한 정보를 제공하지 않은,하지만 여기 개요입니다 :

LIBRARIES = ./lib/ssh ./lib/net-snmp 

SOURCES = foo bar baz 

xyz: $(LIBRARIES) $(SOURCES) 
    command-that-rebuilds-app-from-sources-and-libraries 

./lib/ssh: things-that-ssh-needs 
    command-that-rebuilds-ssh 

./lib/net-snmp: things-that-net-snmp-needs 
    command-that-rebuilds-net-snmp 

XPATH: ./src 
+0

좋아, 나는 거의 생각이 없다. 그러나 도서관이 이미 건설되었는지 알 수있는 방법이 있습니까? 그래서 매번 라이브러리를 만들 필요가 없으며 몇 단계를 건너 뛸 수 있습니다. –

+2

메이크업이이를 처리합니다. 'things-that-ssh-needs'가 변경되지 않으면'lib/ssh'가 재구성되지 않습니다. 당신은 항상'make xyz'를 실행합니다. –

관련 문제