some_name.o.cmd
Linux 커널 코드에는 어떤 파일이 표시됩니까? 자동으로 생성되나요?
답변1
~에서Linux 2.5의 커널 구성 및 구축(내가 인용한 부분은 2.5/2.6 커널에 적용된 변경 사항을 나타냅니다):
변경된 명령줄 매개변수를 식별하여 내장 개체와 모듈을 한 번에 컴파일합니다.[...]
커널 빌드의 주요 성능 문제는 make call입니다(물론 대부분의 시간은 일반적으로 컴파일/링크에 소요되지만 이 비용은 사용된 빌드 시스템과 무관합니다). make는 로컬 Make 파일, 일반 규칙 및 모든 종속성을 읽고 무엇을 해야 할지 파악해야 합니다.따라서 빌드 시스템 성능을 최적화하는 확실한 방법은 불필요한 호출을 피하는 것입니다.[...]
GNU make에서 명령줄 변경을 처리하기 위한 보다 유연한 솔루션을 만들었습니다. 실제 사용법은 매우 간단합니다. 규칙의 명령 부분에 명령을 직접 작성하는 대신 이를 변수에 할당
cmd_link_l_target
하면 빌드 시스템이 필요에 따라 명령을 실행하고 명령줄 자체에 대한 변경 사항을 추적합니다. 구현 작업은 다음과 같습니다.명령을 실행한 후 매크로는if_changed
명령줄을 파일에 기록합니다.<target>.cmd
. 다시 빌드하는 동안 make가 다시 호출되면 이러한 파일이 포함됩니다.*.cmd
.재구축 여부를 결정할 때 전제 조건을L_TARGET
찾아FORCE
규칙의 명령 부분을 항상 다시 실행하도록 강제합니다.
기본적으로 이것은 커널 컴파일 최적화입니다. 이 파일은 make
불필요하게 너무 많은 작업이 수행되는 것을 방지하는 데 사용됩니다 . 위에서 읽은 것처럼 some_name.o.cmd
컴파일할 때 some_name.o
.
자세한 내용은 이전에 링크한 문서의 섹션 4.5(Linux-2.5/2.6에서 kbuild의 새로운 기능은 무엇입니까?).
답변2
Linux 커널 문서의 .cmd 파일에 대한 최신 설명:협회. 저길 봐 .cmd
.
문서에서는 이것이 단순한 최적화가 아니라고 설명합니다. "마지막 호출 이후 명령줄이 변경되면 대상도 다시 빌드되어야 합니다. Make 자체는 이를 지원하지 않으므로 Kbuild는 일종의 메타 프로그래밍을 통해 이를 구현합니다."