Frage

Warum verwenden vorkompilierte Header?


antwortet Lesen, vermute ich, was ich habe mit ihnen zu tun Art von dumm ist:

#pragma once

// Defines used for production versions

#ifndef PRODUCTION
#define eMsg(x) (x) // Show error messages
#define eAsciiMsg(x) (x)
#else
#define eMsg(x) (L"") // Don't show error messages
#define eAsciiMsg(x) ("")
#endif // PRODUCTION

#include "targetver.h"
#include "version.h"

// Enable "unsafe", but much faster string functions
#define _CRT_SECURE_NO_WARNINGS
#define _SCL_SECURE_NO_WARNINGS

// Standard includes
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <direct.h>
#include <cstring>
#ifdef _DEBUG
#include <cstdlib>
#endif

// Standard Template Library
#include <bitset>
#include <vector>
#include <list>
#include <algorithm>
#include <iterator>
#include <string>
#include <numeric>

// Boost libraries
#include <boost/algorithm/string.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/scoped_array.hpp>

//Windows includes
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include "FILETIME_Comparisons.h"
#include <shlwapi.h>
#include <Shellapi.h>
#include <psapi.h>
#include <imagehlp.h>
#include <mscat.h>
#include <Softpub.h>
#include <sfc.h>
#pragma comment(lib, "wintrust.lib")
#pragma comment(lib,"kernel32.lib")
#pragma comment(lib,"Psapi.lib")
#pragma comment(lib,"shlwapi.lib")
#pragma comment(lib,"imagehlp.lib")
#pragma comment(lib,"Advapi32.lib")
#pragma comment(lib,"Shell32.lib")
#pragma comment(lib,"Sfc.lib")
#pragma comment(lib,"Version.lib")

// Crypto ++ libraries
#ifdef _DEBUG
#pragma comment(lib,"cryptlibd.lib")
#else
#pragma comment(lib,"cryptlib.lib")
#endif
#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1
#include <md5.h>
#include <sha.h>

// String libraries
#include "stringUnicodeConversions.h"
#include "expandEnvStrings.h"
#include "randomString.h"
#include "getShortPathName.h"

// Regular Expression Libraries
#include "fpattern.h"

// File Result Record
#include "unixTimeToFileTime.h"
#include "fileData.h"

// Writer
#include "writeFileData.h"

// Criteria Structure System
#include "priorities.h"
#include "criterion.H"
#include "OPSTRUCT.H"
#include "regexClass.H"
#include "FILTER.h"

// Sub Programs Root Class
#include "subProgramClass.h"

// Global data
#include "globalOptions.h"

// Logger
#include "logger.h"

// Console parser
#include "consoleParser.h"

// Timeout handler
#include "timeoutThread.h"

// Zip library
#include "zip.h"
#include "unzip.h"
#include "zipIt.h"

// Scanner
#include "mainScanner.h"
#include "filesScanner.h"

// Sub Programs
#include "volumeEnumerate.h"
#include "clsidCompressor.h"
#include "times.h"
#include "exec.h"
#include "uZip.h"

// 64 bit support
#include "disable64.h"
War es hilfreich?

Lösung

Es erstellt ein Los schneller. C ++ Kompilierung dauert Jahre ohne sie. Versuchen Sie, einige Zeit in einem großen Projekt zu vergleichen!

Andere Tipps

In C / C ++, der # include-Mechanismus ist eine textuelle Kopie der Datei in die aktuelle Datei angegeben. Header enthalten andere Header (die noch andere Header enthalten), so dass, wenn Sie eine #include tun, könnte es sein, Zehntausende von Zeilen C ++ in jede CPP-Datei hinzugefügt (oder cxx, c, was auch immer), von denen alle sein müssen jedes Mal zusammengestellt. Dies kann ein Sever Engpass für große Projekte sein.

vorkompilierte Header dies beschleunigen, indem jeder Header einmal kompilieren, dann einschließlich der kompilierten Zustand in die CPP sie in enthalten sind.

Re: Ihre aktuelle Nutzung, wenn Sie ein Ziel mit einer sehr großen Anzahl von Dateien haben, kann es immer noch schneller sein PCH auf diese Weise zu verwenden - versuchen sie, um herauszufinden, auszuschalten. Es hängt davon ab: wenn Sie eine Menge von Header Ihrer eigenen, und man sich nur selten ändern, und Sie haben eine sehr große Anzahl von Quelldateien, die Sie häufig viel mehr ändern, dann PCH Nutzungszeiten wieder aufzubauen geschnitten werden

Aber auch normale Beratung ist nur, um die Dinge in PCH zu setzen, die sich nie ändern, weil es einen gewissen Overhead selbst die PCH zu produzieren. Wenn Sie, dass weg mit jedem Wiederaufbau auslösen (durch ständig eine Ihres Header Tweaking), PCH verwendet, kann die langsamer wieder aufzubauen.

Sie brauchen also nicht zu kompilieren, haben sie jedes Mal, wenn Sie Ihr Projekt erstellen. Sie sind für System-Header verwendet, die sich nicht ändern wollen.

Es beschleunigt die Kompilierung.

Wenn Sie Header aus anderen Projekten einschließlich, erwarten Sie nicht, sich zu ändern. Wenn Sie diese in eine vorkompilierte Header setzt, dann wird dieser Code nicht neu kompiliert werden müssen, wenn Sie Änderungen an Ihrem Quellcode zu machen. Dadurch verringert sich wiederholende Zusammenstellung von unveränderten Code, die Beschleunigung der Zeit kompiliert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top