빌드 시스템을 보면서 많은 SCons, Bjam, cmake, Tundra 등은 #include 스캐너를 내장하고 있습니다. 그러나 gcc & icc는 C++ 파일이 의존하는 헤더 파일의 이름을 출력하는 -MMD
(또는 -MD
) 옵션을 제공합니다."g ++ -MMD"가 검사를 포함하는 것보다 낫습니까?
-MMD
의존 옵션은 신뢰할 수있는 것 같습니다. #include
을 C 파일에 추가하면 빌드 시스템이이를 다시 컴파일 할 수 있도록 해당 타임 스탬프가 변경됩니다. #include
을 헤더 파일에 추가하면 해당 타임 스탬프가 변경되어 영향을받는 모든 C 파일을 다시 컴파일합니다.
스캔 시스템이 포함되어 있지만, -MMD
은 내게 강건 해 보입니다. 어떤 것이 가장 좋은 이유는 무엇입니까?
감사합니다. 왜 모든 도구에 # 스캔 기능이 포함되어 있는지 알 수 있습니까? – ACyclic
모두가 gcc (또는 icc)를 사용하지 않으며 gcc의 IIRC 이전 버전은 전체 경로명이 아닌'-MD'의 출력에만 파일 이름을 포함합니다. 'dir1/dir2/foo.o' 대신'foo.o :' –
MMD의 작은 사안은리스트를 포함합니다 : #을 #include하면 -I include dirs를 모두 보입니다. 두 개의 foo.h 파일이 있으면 첫 번째 파일을 읽습니다. 따라서 검색 목록의 앞부분에 -I includedir과 동일한 이름의 새 헤더 파일을 추가하면 -MMD에 의존하게됩니다. –
ACyclic