2012-07-02 2 views
0
targetOne : header/headerAB.h source/sourceA.cpp source/sourceB.cpp source/main.cpp 
     g++ -Wall header/headerAB.h source/sourceA.cpp source/sourceB.cpp source/main.cpp 

내가 1로 유지 한 후 오히려 여러 대상이 휴식해야하는 이유 이유가 있나요?
어떤 경우 Makefile에서 하나가 아닌 별도의 타겟을 가질 필요가 있습니까?어떤 경우에 하나의 Makefile에 여러 개의 target을 보관해야합니까?

+0

다른 옵션으로 (또는 다른 컴파일러로) 응용 프로그램의 일부를 컴파일하려는 경우를 생각해보십시오. 또한 '.h'파일을 g ++에 대한 입력으로 전달해서는 안됩니다. 한 가지 목표는 짧고 간단한 프로젝트에 유용 할 수 있습니다. – osgx

+0

@osgx'.h '파일을 g ++에 입력으로 전달하면 안됩니다.'이 사실을 알지 못했습니다. 감사합니다. –

답변

1

http://mrbook.org/tutorials/make/

사용 종속성을 인용. 때로는 다른 대상을 사용하는 것이 유용합니다. 이는 프로젝트에서 단일 파일을 수정하는 경우 수정 한 내용 만 전부를 다시 컴파일 할 필요가 없기 때문입니다.

그래서 당신은 부분적인 소스 업데이트 후 빠르게 재 컴파일을 얻을 것이다. 그리고 이것은 변경 사항이 매우 적은 거대한 프로젝트 ("> 1M LOC 프로젝트 전체에 비해)를 구현하는"필수 사항 "입니다.

또한 여러 대상을 사용하면 프로젝트의 각 부분마다 다른 규칙을 설정할 수 있습니다.

+0

AH'부분적인 소스 업데이트 이후에 재 컴파일이 빨라질 것입니다 .' 나는 Makefile이 자동으로 어느 파일을 편집했는지 탐지하고 그 중 하나만 컴파일한다는 인상하에있었습니다! –

1

일반적으로, 유연성과 확장 성을 위해 당신은 '같은 규칙에 여러 파일을 구축하는 장점이 무엇인지'요청해야합니다. 처음 빌드를 할 때 모든 것이 같은 규칙으로 컴파일되면 더 빠를 것입니다.

다음 단계에 그러나

, 당신은 단지 당신이 정말로 객체 파일에 내장 된 다른 모든 소스 코드 파일을 원하지 않는 하나 개의 소스 코드 파일을 변경하면? 나는 그렇지 않다고 생각한다. 하지만 모든 규칙을 하나의 규칙으로 완료하면 그럴 수 있습니다. 소스 코드 파일이 많으면 비용이 많이 듭니다.

이렇게하면 라이브러리를 빌드하는 경우 모든 소스를 컴파일 한 다음 라이브러리를 아카이브하는 규칙을 하나만 사용하는 대신 라이브러리를 별도의 단계로 빌드해야합니다. 물론 그 상황에서 라이브러리 보관 단계에서는 소스 코드가 어떻게 컴파일되었는지 또는 어떤 언어로되어 있는지를 알 필요가 없으므로 유지 관리가 쉬워집니다.

관련 문제