미리 컴파일 된 헤더는 대규모 프로젝트에서 많은 시간을 절약 할 수있는 것처럼 보이지만 일부 문제가있는 고통을 느끼는 것처럼 보입니다.GNU/Linux 환경/툴 체인에서 미리 컴파일 된 헤더의 장단점은 무엇입니까?
미리 컴파일 된 헤더를 사용하는 데는 무엇이 좋은가요? 특히 Gnu/gcc/Linux 환경에서 사용하는 것과 관련이 있습니까?
미리 컴파일 된 헤더는 대규모 프로젝트에서 많은 시간을 절약 할 수있는 것처럼 보이지만 일부 문제가있는 고통을 느끼는 것처럼 보입니다.GNU/Linux 환경/툴 체인에서 미리 컴파일 된 헤더의 장단점은 무엇입니까?
미리 컴파일 된 헤더를 사용하는 데는 무엇이 좋은가요? 특히 Gnu/gcc/Linux 환경에서 사용하는 것과 관련이 있습니까?
미리 컴파일 된 헤더의 유일한 이점은 빌드가 너무 느리면 미리 컴파일 된 헤더가 속도를 향상시킬 수 있다는 것입니다. 잠재적 단점 :
더 많은 메이크 파일 의존성이 발생합니다. 그들이 틀린 경우에, 당신은 틀린 것을 빨리 형성한다. 안좋다.
원칙적으로 모든 헤더를 미리 컴파일 할 수있는 것은 아닙니다. (#include 앞에 #define을 두는 것에 대해 생각해보십시오.) 그래서 어떤 경우에 gcc가 실제로 올바르게됩니까? 이 최첨단 기능을 얼마만큼 신뢰하고 싶습니까? 당신은 충분히 빨리 쌓이면
는 미리 컴파일 된 헤더를 사용할 필요가 없다. 당신이 너무 느린 빌드 경우에, 나는 (더크는 오른쪽에 있습니다) & T nmake 또는 ccache처럼 같은 도구를 사용하여 급여
에 비해 저렴 빠른 하드웨어를 구입
을 생각 하는데요 둘 다 재 컴파일을 피하기 위해 신뢰할 수있는 기술을 사용합니다.
ccache gcc, g ++, gfortran에 대한 프론트 엔드 캐싱은 저에게 큰 도움이됩니다. 그것의 웹 사이트가 말한대로
, 그냥 'ccache는 컴파일러 캐시입니다. 컴파일러는 스위치를 사용하고 컴파일을 만족할 수 있는지 검색하기 위해 해시를 사용하여 캐시에서 C/C++ 컴파일러에 대한 캐싱 프리 프로세서로 작동합니다. 결과적으로 공통 컴파일에서 5 ~ 10 배의 속도 향상을 가져옵니다. 데비안/우분투에
apt-get install ccache
'을 할 수와 이름
gcc
,
g++
,
gfortran
,
/usr/bin/ccache
-
c++
... 그 시점에
/usr/local/bin
, 말, 부드러운 - 링크를 만들 수 있습니다. 일부 초기 의견에 대 한 응답이 더 명시 적으로 만들려면
[편집이] :이 컴파일 단계의 큰 덩어리를 캐싱하여 기본적으로 미리 컴파일 된 헤더 및 소스을 제공합니다. 따라서 미리 컴파일 된 헤더와 유사한 아이디어를 사용하고 더 나아갑니다. 스피드 업은 극적 일 수 있습니다 - 웹 사이트에서 말한 것처럼 5에서 10의 요소.
:
장점 :
단점 : 당신이 많이 변경 헤더를 사용하는 경우
OP는 GNU/Linux에 대해 물었습니다. –
그럼에도 불구하고 프로와 죄수는 gcc에도 적용됩니다. –
일반 C의 경우 미리 컴파일 된 헤더는 사용하지 않는 것이 좋습니다. 말했듯이 잠재적으로 문제를 일으킬 수 있으며 사전 처리 시간은 일반 컴파일과 비교할 때 실제로 적습니다.
C++의 경우 미리 컴파일 된 헤더는 많은 시간을 절약 할 수 있습니다. C++ 헤더에는 컴파일 비용이 큰 대형 템플릿 코드가 포함되어 있기 때문입니다. 실무 경험이 없으므로 프로젝트에서 얼마나 많은 비용을 절약 할 수 있는지 측정하는 것이 좋습니다.이렇게하려면 미리 컴파일 된 헤더를 사용하여 전체 프로젝트를 컴파일 한 다음 단일 개체 파일을 삭제하고 해당 파일을 다시 컴파일하는 데 걸리는 시간을 측정하십시오.
빌드 시스템으로 cmake를 사용하는 Qt 프로젝트에서 PCH를 사용하고 있으며 많은 시간을 절약 할 수 있습니다. PCH cmake 스크립트를 몇 장 붙잡았는데, 상당히 오래된 것이기 때문에 약간의 조정이 필요했지만, 예상보다 설치가 일반적으로 쉬웠습니다. 나는 추가해야한다, 나는 cmake 전문가의 다량이 아니다.
Qt (QtCore, QtGui, QtOpenGL)의 상당 부분과 몇 개의 안정적인 헤더를 즉시 포함합니다.
장점은 : Qt는 클래스
단점 :
당신은 PCH를 포함 할 수 없습니다내가 얘기 한 거의 모든 사람들에게서, "설치하기 쉽다"라는 말은 당신이 얻을 수있는 합의점과는 거리가 멀다. 당신은 정교 할 수 있습니까? – Catskul
죄송합니다.하지만 주석의 서식을 지정할 수 없으므로 줄 바꿈됩니다. CMakeLists.txt에서 'include (PCHSupport)'및 'ADD_PRECOMPILED_HEADER (myprojectname $ {CMAKE_SOURCE_DIR} /pch.h)'라는 두 줄을 추가했습니다. 프로젝트의 구현 파일에서 나는 처음에 '#include
The GNU gcc documentation은 미리 컴파일 된 헤더가있는 함정에 대해 설명합니다.
실제로 gcc는 PCH를 잘 처리합니다. pch를 포함하기 전에 #define이 있으면 pch는 단순히 사용되지 않고 normal 포함이 사용됩니다. 당신은 또한 자신을 다소 업데이트하는 것을 고려하고 싶을지도 모르지만, PCH는 현재 gcc에서 5 년 동안 존재하고 있으며 이제는 더 이상 최첨단이 아니지 않습니다. – hirschhornsalz
ccache 위에는 여러 컴퓨터에서 distcc를 사용할 수도 있습니다. –
@drhirsch : 저는 신중한 gcc 사용자입니다. 새로운 릴리스가있을 때마다 무언가가 깨집니다. 나를 위해, 5 년은 아직도 최면에 걸리고 있습니다. –