2009-08-27 3 views

답변

10

미리 컴파일 된 헤더의 유일한 이점은 빌드가 너무 느리면 미리 컴파일 된 헤더가 속도를 향상시킬 수 있다는 것입니다. 잠재적 단점 :

  • 더 많은 메이크 파일 의존성이 발생합니다. 그들이 틀린 경우에, 당신은 틀린 것을 빨리 형성한다. 안좋다.

  • 원칙적으로 모든 헤더를 미리 컴파일 할 수있는 것은 아닙니다. (#include 앞에 #define을 두는 것에 대해 생각해보십시오.) 그래서 어떤 경우에 gcc가 실제로 올바르게됩니까? 이 최첨단 기능을 얼마만큼 신뢰하고 싶습니까? 당신은 충분히 빨리 쌓이면

는 미리 컴파일 된 헤더를 사용할 필요가 없다. 당신이 너무 느린 빌드 경우에, 나는 (더크는 오른쪽에 있습니다) & T nmake 또는 ccache처럼 같은 도구를 사용하여 급여

  • 에 비해 저렴 빠른 하드웨어를 구입

    • 을 생각 하는데요 둘 다 재 컴파일을 피하기 위해 신뢰할 수있는 기술을 사용합니다.

  • +3

    실제로 gcc는 PCH를 잘 처리합니다. pch를 포함하기 전에 #define이 있으면 pch는 단순히 사용되지 않고 normal 포함이 사용됩니다. 당신은 또한 자신을 다소 업데이트하는 것을 고려하고 싶을지도 모르지만, PCH는 현재 gcc에서 5 년 동안 존재하고 있으며 이제는 더 이상 최첨단이 아니지 않습니다. – hirschhornsalz

    +0

    ccache 위에는 여러 컴퓨터에서 distcc를 사용할 수도 있습니다. –

    +0

    @drhirsch : 저는 신중한 gcc 사용자입니다. 새로운 릴리스가있을 때마다 무언가가 깨집니다. 나를 위해, 5 년은 아직도 최면에 걸리고 있습니다. –

    5

    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의 요소.

    +6

    -1 : 미리 컴파일 된 헤더와 관련이 있는지 모르겠습니다. – quamrana

    +6

    이것은 미리 컴파일 된 헤더와 아무 관련이 없습니다. –

    +3

    @Martin : 프리 컴파일 된 헤더를 쓸모 없게 만듭니다. 사전 컴파일 된 헤더가 없어도 컴파일 속도를 향상시킵니다. – elcuco

    8
    내가 GNU/GCC/리눅스 이야기 할 수는 없지만 내가 VS2005에서 미리 컴파일 된 헤더를 처리 한

    :

    장점 :

    • 당신이 큰 헤더가있는 경우 컴파일 시간을 저장하는 많은 모듈이 에 포함됩니다.
    • 가끔 이 자주 변경되지 않는 헤더 (제 3 자로부터)에서 잘 작동합니다.

    단점 : 당신이 많이 변경 헤더를 사용하는 경우

    • , 은 컴파일 시간을 증가시킬 수있다.
    • 설정 및 유지 관리가 까다로울 수 있습니다.
    • 미리 컴파일 된 헤더를 강제 컴파일하지 않으면 헤더 변경 사항이 분명히 무시되는 경우가 있습니다.
    +0

    OP는 GNU/Linux에 대해 물었습니다. –

    +7

    그럼에도 불구하고 프로와 죄수는 gcc에도 적용됩니다. –

    4

    일반 C의 경우 미리 컴파일 된 헤더는 사용하지 않는 것이 좋습니다. 말했듯이 잠재적으로 문제를 일으킬 수 있으며 사전 처리 시간은 일반 컴파일과 비교할 때 실제로 적습니다.

    C++의 경우 미리 컴파일 된 헤더는 많은 시간을 절약 할 수 있습니다. C++ 헤더에는 컴파일 비용이 큰 대형 템플릿 코드가 포함되어 있기 때문입니다. 실무 경험이 없으므로 프로젝트에서 얼마나 많은 비용을 절약 할 수 있는지 측정하는 것이 좋습니다.이렇게하려면 미리 컴파일 된 헤더를 사용하여 전체 프로젝트를 컴파일 한 다음 단일 개체 파일을 삭제하고 해당 파일을 다시 컴파일하는 데 걸리는 시간을 측정하십시오.

    0

    빌드 시스템으로 cmake를 사용하는 Qt 프로젝트에서 PCH를 사용하고 있으며 많은 시간을 절약 할 수 있습니다. PCH cmake 스크립트를 몇 장 붙잡았는데, 상당히 오래된 것이기 때문에 약간의 조정이 필요했지만, 예상보다 설치가 일반적으로 쉬웠습니다. 나는 추가해야한다, 나는 cmake 전문가의 다량이 아니다.

    Qt (QtCore, QtGui, QtOpenGL)의 상당 부분과 몇 개의 안정적인 헤더를 즉시 포함합니다.

    장점은 : Qt는 클래스

    • , 더 앞으로 선언이 필요하지, 물론 더 포함된다.
    • 빠름.
    • 설정하기 쉽습니다.

    단점 :

    당신은 PCH를 포함 할 수 없습니다
    • 는 헤더에 포함되어 있습니다. 이것은별로 문제가되지 않습니다. Qt를 사용하고 빌드 시스템이 moc 파일을 seperatly로 변환하도록합니다. 이것은 정확하게 제 구성입니다. 이 경우 moc가 헤더에서 장르되기 때문에 헤더에 qt 헤더를 #include해야합니다. 해결책은 머리글에 #include 주위에 추가 포함 가드를 넣는 것입니다.
    +0

    내가 얘기 한 거의 모든 사람들에게서, "설치하기 쉽다"라는 말은 당신이 얻을 수있는 합의점과는 거리가 멀다. 당신은 정교 할 수 있습니까? – Catskul

    +0

    죄송합니다.하지만 주석의 서식을 지정할 수 없으므로 줄 바꿈됩니다. CMakeLists.txt에서 'include (PCHSupport)'및 'ADD_PRECOMPILED_HEADER (myprojectname $ {CMAKE_SOURCE_DIR} /pch.h)'라는 두 줄을 추가했습니다. 프로젝트의 구현 파일에서 나는 처음에 '#include '을 사용합니다. automoc을 사용하는 Qt 빌드 시스템의 분리 때문에 pch.h를 헤더에 포함시켜야합니다.이 작업은 추가 포함 가드와 함께 작동합니다. 후자는 실제로 알아내는 것이 가장 힘든 부분 이었지만 한 시간 만에 작업을했기 때문에 "쉽다"고 생각합니다. – hirschhornsalz