質問

なぜ、プリコンパイル済みヘッダーを使用する?

<時間>

の応答を読むと、私は私が彼らと一緒に行ってきたことは一種の愚かである疑います:

#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"
役に立ちましたか?

解決

これはの多くの迅速コンパイルします。 C ++のコンパイルはそれらなしで年かかります。大規模なプロジェクトにいくつかの時間を比較してみてください!

他のヒント

C / C ++、の#include機構においては、現在のファイルに指定したファイルのテキストのコピーです。ヘッダは(まだ他のヘッダを含め)他のヘッダをインクルードするので、あなたがする#includeを行うとき、それはする必要がありますすべてが、それぞれのcppファイル(またはCXX、C、何でも)にC ++のラインの数万人を追加することができ毎回コンパイル。これは、大規模なプロジェクトのためのサーバのボトルネックになる可能性があります。

プリコンパイル済みヘッダはそれらがに含まれているCPPに状態をコンパイルすることを含め、一度各ヘッダをコンパイルすることによって、これをスピードアップする。

再:あなたの現在の使用状況、あなたは非常に多数のファイルを使用してターゲットを持っている場合、それはまだそのようにPCHを使用する方が速いかもしれ - を見つけるためにそれらをオフに切り替えてみてください。それは依存します:あなたがあなた自身のヘッダをたくさん持っている、とあなたはまれにしかそれらを変更し、あなたが、あなたのPCHの使用率が回を再構築削減する、はるかに頻繁に変更されるソースファイルの非常に多くを持っている場合は、

しかし、PCH自体を生産することに一定のオーバーヘッドがあるため、通常のアドバイスは、唯一の変更はありませんPCHで物事を置くことです。あなたは(常にあなたのヘッダーの1つを微調整することで)すべての再構築とそのオフをトリガする場合は、PCHを使用して、より遅い再構築させることがあります。

だから、彼らにあなたのプロジェクトをビルドするたびにコンパイルする必要はありません。彼らは変更するつもりされていないシステムヘッダに使用しています。

これは、コンパイルをスピードアップします。

あなたが他のプロジェクトからのヘッダを含めている場合は、

、あなたはそれらを変更することを期待しないでください。あなたはこれらのプリコンパイル済みヘッダーに入れた場合、あなたのソースコードに変更を加える際に、そのコードを再コンパイルする必要はありません。これは、コンパイル時間をスピードアップ、変わらないコードの繰り返しコンパイルを減らします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top