2014-03-24 2 views
0

-M-MM 인 추적 종속성에 대한 기본적으로 두 가지 옵션이 있습니다. 차이점은 -MM은 시스템 헤더와 헤더가 포함되지 않는다는 것입니다.GCC 종속성 추적 : -MM이 -MM보다 낫습니까?

제 질문 : 왜 -M을 사용하고 싶습니까? 생성 된 .d 파일을 크게 팽창시킵니다. 시스템 헤더에는 대개 다른 시스템 헤더의 큰 팩이 포함되어 있기 때문입니다. 또한 시스템 헤더는 make으로 작성할 수 없으므로 종속성으로 사용하면 이점이 없습니다. 내가 볼 수있는 유일한 작은 이점은 - 필요한 시스템 헤더가 누락 된 경우 make이 누락 된 헤더를보고하는 대신 gcc을보고한다는 것입니다. 그러나 이것의 이득은 무엇입니까?

일을 정리하면 -M이 전혀 유용하지 않을 이유가 없습니다. 내가 놓친 게 있니? 어떤 시나리오에서 을 -MM 이상으로 사용해야하는 시나리오가 있습니다.

답변

2

대부분의 헤더 파일은 make에 의해 "빌드"될 수 없습니다. 전제 조건으로 나열되어 있기 때문에 변경되면 변경된 소스 코드가 다시 빌드됩니다. 예를 들어 시스템에 보안 픽스 패키지를 설치하고 사용하는 시스템 헤더 중 하나를 수정하는 경우 모든 코드가 다시 작성되도록 할 수 있습니다. 요즘은 대부분의 기본 라이브러리의 역 호환성으로 인해 대부분의 시간이 실제로 필요하지는 않습니다.

또한 크로스 컴파일하면 "시스템"헤더 파일이 교차 타겟에서 제공됩니다. 이러한 헤더는 임베디드 시스템 또는 유사 할 수 있으며 표준 시스템보다 더 자주 역방향 호환 방식으로 바뀔 수 있습니다.

0

여러 가지 이유가있을 수 있습니다.

시스템 라이브러리를 업데이트 한 후 필요한 부분 만 재생성하십시오. 드문 일이지만, 누군가 그것을 필요로 할 수도 있습니다.

일부 이유 때문에 전체 종속성 목록 가져 오기 - 종속성 그래프를 그릴 수 있습니까?

잠재적으로 사용되는 모든 헤더 파일에 대해 ctags을 생성하십시오.

...

는 개인적으로 나는 ctags를 위해 사용, 그래서 모든 가상의 예 아닙니다.

1

왜 누구에게 -M을 사용 하시겠습니까?

시스템 헤더가 변경되면 그에 따라 다시 작동되기를 원합니다. 즉, 코드에서 헤더를 사용하고 해당 헤더가 변경되면 코드가 변경되지 않아도 코드가 다시 작성됩니다.

헤더를 종속성으로 나열하면 드물게 해당 헤더를 '빌드'하는 것이 아닙니다. 시스템 헤더도 마찬가지입니다.