C / C ++ 구축 : 실제로 일어나는 일과 왜 그렇게 오래 걸립니까
소프트웨어 개발 시간의 비교적 큰 부분은 코드 작성, 실행, 디버깅 또는 디자인에 소비되지 않지만 컴파일이 완료되기를 기다리는 데 소요됩니다. 작업을 빠르게하려면 먼저 C / C ++ 소프트웨어를 컴파일 할 때 무슨 일이 일어나고 있는지 이해해야합니다. 단계는 대략 다음과 같습니다.
이제 각 단계를 더 빨리 만드는 방법에 중점을 두어 자세히 살펴 보겠습니다.
구성
이것은 구축을 시작할 때의 첫 번째 단계입니다. 일반적으로 configure 스크립트 또는 CMake, Gyp, SCons 또는 기타 도구를 실행하는 것을 의미합니다. 매우 큰 Autotools 기반 구성 스크립트의 경우 1 초에서 몇 분 정도 걸릴 수 있습니다.
이 단계는 비교적 드물게 발생합니다. 구성을 변경하거나 빌드 구성을 변경할 때만 실행하면됩니다. 빌드 시스템을 변경하지 않으면이 단계를 더 빨리 수행하기 위해 수행 할 작업이 많지 않습니다.
빌드 도구 시작
IDE에서 빌드 아이콘 (보통 make의 별칭)을 클릭하거나 make를 실행할 때 발생합니다. 빌드 도구 바이너리는 구성 파일과 빌드 구성을 시작하고 읽으며 일반적으로 동일한 구성입니다.
빌드의 복잡성과 크기에 따라 1 초에서 몇 초까지 걸릴 수 있습니다. 그 자체로는 그렇게 나쁘지 않을 것입니다. 불행히도 대부분의 make 기반 빌드 시스템은 make가 모든 빌드마다 수십에서 수백 번 호출되도록합니다. 일반적으로 make의 재귀 적 사용 (나쁜)으로 인해 발생합니다.
Make가 너무 느린 이유는 구현 버그가 아닙니다. Makefile의 구문에는 구현이 거의 불가능한 단점이 있습니다. 이 문제는 다음 단계와 결합 될 때 더욱 두드러집니다.
의존성 검사
빌드 도구가 구성을 읽은 후에는 어떤 파일이 변경되었으며 어떤 파일을 다시 컴파일해야하는지 결정해야합니다. 구성 파일에는 빌드 종속성을 설명하는 방향성 비순환 그래프가 포함되어 있습니다. 이 그래프는 일반적으로 구성 단계에서 작성됩니다. 빌드 도구 시작 시간 및 종속성 스캐너는 모든 빌드마다 실행됩니다. 이들의 결합 된 런타임은 편집 컴파일-디버그주기의 하한을 결정합니다. 소규모 프로젝트의 경우이 시간은 보통 몇 초 정도입니다. 이것은 참을 수 있습니다. 대안이 있습니다. 가장 빠른 것은 Google 엔지니어가 Chromium을 위해 만든 Ninja입니다. CMake 또는 Gyp을 사용하여 빌드하는 경우 Ninja 백엔드로 전환하십시오. 빌드 파일 자체에서 아무것도 변경할 필요가 없으며 속도 향상을 즐기십시오. 그러나 Ninja는 대부분의 배포판에 패키지되어 있지 않습니다.
편집
이 시점에서 마침내 컴파일러를 호출합니다. 일부 모서리를 자르면 대략적인 단계가 있습니다.
대중적인 믿음과는 달리 C ++를 컴파일하는 것이 실제로 그렇게 느린 것은 아닙니다. STL은 느리고 C ++를 컴파일하는 데 사용되는 대부분의 빌드 도구는 느립니다. 그러나 언어의 느린 부분을 완화하는 더 빠른 도구와 방법이 있습니다.
그것들을 사용하려면 약간의 팔꿈치 그리스가 필요하지만 이점은 부인할 수 없습니다. 더 빠른 빌드 시간은 더 행복한 개발자, 더 민첩성 및 궁극적으로 더 나은 코드로 이어집니다.