2017-02-09 4 views
0

그래서이 미친 약간 들릴 수는 있지만, 나는 다음과 같은 생각이 ... C에서Idea C++ 자동 통합 빌드 시스템, 작동합니까?

++는 #이의를 포함하거나 단순히 복사 및 붙여 넣기를 사용하여 하나 개의 파일에 모든 코드를 삽입 할 때이 단결 빌드를 호출했다. 이렇게하면 번개를 빠르게 편집 할 수 있습니다.

이제 간단히하기 위해 헤더 전용 라이브러리가 있다고 가정하고 클래스 만 사용하도록 제한합니다 (예 : 네임 스페이스 사용). 이제 자동으로 작성하면 어떻게 작동하는지 궁금합니다. 스크립트/도구는 .h 파일을 사전 처리합니다. 포함 및 종속성 선택. 이 도구는 모든 .h 파일을 반복적으로 탐색하고 include의 종속성 매핑을 구성합니다. 그런 다음 #includes를 사용하여 하나의 파일 (main.cpp)에 이러한 종속성을 배치하고 컴파일합니다.

이제는 자동 화합 제작자라는 아이디어에 대한 귀하의 의견을 듣고 싶습니다. 이 일이 영리합니까? 내가 기대했던대로 작동 할까?

답변

1

유니티 빌드가 실제로 오버라이드되어 있습니다.

번개를 빠르게 편집 할 수 있습니다.

요즘은 그렇지 않습니다. 충분한 메모리가있는 컴파일 전용 머신이 있다고 가정하면 컴파일은 I/O 바운드가 아닙니다. 모든 최신 운영 체제는 처음 읽은 후 파일을 메모리에서 가져 오는 것보다 캐시합니다. RAM 드라이브에 파이핑하거나 저장하여 중간 파일을 피할 수 있습니다. 따라서 선처리 작업은 대부분의 경우 파일을 연결하는 것입니다. 이것은 빠르다. 실시간으로 컴파일 및 링크에 소비됩니다.

따라서 수천 개의 파일이있는 심각한 응용 프로그램은 엄청납니다. 실제 사례 - 우리는 소스 코드가 100MB가 넘는 데이터를 필요로하는 앱을 사용합니다 (시스템 및 제 3 자 포함 제외). 그래서 당신의 시스템은 약 150MB의 파일에 대해 작동해야합니다. 어떤 컴파일러가 컴파일을 거부한다면 나는 놀라지 않을 것이다. 컴파일 할 시간은 말할 것도 없습니다. 작은 파일로 분할하고 병렬로 컴파일하는 것이 더 좋습니다. 다시 한 번 실제 예를 들어 보겠습니다. 단일 스레드 컴파일은 40 분이 걸렸습니다. 하나의 서버에서 16 개의 스레드로 2.5-3 분 실행하고 16 개의 서버로 구성된 팜에서 16 개의 distcc로 30 초를 더한 후 링크 할 수 있습니다.

LTO 및 정적 빌드가 완료 될 때 더 나은 최적화 인 단일 빌드의 다른 이점은 사라집니다.

질문에 답변 - 네가 그렇게 할 수 있습니다. 그것은 의미가 있습니까? 불안한.

+0

150MB 파일을 만드는 데 얼마나 오래 걸릴까요? 코드 기반 때문에 빌드가 하루 종일 걸리는 이야기를 들었습니다. 하나의 파일에 모든 것을 결합 할 때 몇 분이 걸렸습니다. – efel

+0

다른 빌드를 말할 수 없다 - 내가 아는 것들을 위해 할 수있다. 또한 얼마나 많은 메모리가 필요합니까? 주어진 예제에서 LTO 만 사용하면 35GB의 RAM이 필요하며, gcc 5.1 또는 5.4에서 개선 된 이후에 충돌이 발생했습니다. – Anty

0

당신은 무엇을하고 있습니까?

"매번 세계를 다시 컴파일해야하기 때문에" "머리말 만"이 싫습니다. "용감한 새로운 세상"에는 단 하나의 파일 만 있으므로 언제나 매번 컴파일 될 것입니다.

사람들은 C++을 만들 때 많은 시간과 노력을 들여 라이브러리 등을 사용하여 컴파일 속도를 높일 수있었습니다. 오, 내가 지금보고있는 시스템은 1700 만 개가 넘는 코드 라인을 가지고 있습니다. 한 파일에 그걸 원하니?

의견에서 OP가 제공하는 링크는 좋은 설명입니다. 내가 보는 큰 문제는 확장 성입니다. 그것은 내가 (상속 된) 코드베이스에서 경비원이 파일을 여는 것을 피하기 위해 인클루드 밖의 하나의 영역을 생각 나게했다. 예 :

#ifndef BLAH_H 
#include <blah.h> 
#endif 
+0

예 .. 왜 RAM에 들어갈 수 있고 gcc가 받아 들일 수 있다면 ..지금하는 일보다 빨리 컴파일 될까요? – efel

+0

아니요, 힙이 느려집니다. 이제 전체 시스템에서 1,700 만 줄을 변경하지 않은 파일에서 1000 줄의 코드를 다시 컴파일합니다. – John3136

+0

하지만 석방해야 할 때 어떻게됩니까? 새 하드웨어를 재 컴파일하거나 막대한 비용을 투자해야합니까? – efel