7

実行中:gccバージョン4.2.1(Apple Inc.ビルド5664)

デフォルトのプリコンパイル済みヘッダーを使用してアップルのXCodeプロジェクトを作成しました。非常に遅いようで、メイン機能が含まれていない些細なメインファイルにはコードが含まれていません。コンパイルには6秒かかります。これは、新しいSSDドライブにアップグレードした後です。私はラップトップを使用していますが、ワークステーションにアップグレードすると問題が軽減されるとの予約があります。プリコンパイル済みヘッダーをオフにすると、メインファイルは1秒以内にコンパイルされます。プリコンパイル済みヘッダーを使用すると、すべてのファイルにペナルティが課せられるようです。この遅延により、コンパイルや、良くないコードの実験を避けたいと思うようになります。プリコンパイル済みヘッダーに含めているものは次のとおりです。

#pragma once

#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <fstream>
#include <functional>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <valarray>
#include <vector>

#include <boost/smart_ptr/scoped_ptr.hpp>
#include <boost/smart_ptr/scoped_array.hpp>
#include <boost/smart_ptr/shared_ptr.hpp>
#include <boost/smart_ptr/shared_array.hpp>
#include <boost/smart_ptr/make_shared.hpp>  
#include <boost/smart_ptr/weak_ptr.hpp>
#include <boost/smart_ptr/intrusive_ptr.hpp>

#include <boost/regex.hpp>
#include <boost/thread.hpp>
#include <boost/bind/bind.hpp>
#include <boost/bind/apply.hpp>
#include <boost/bind/protect.hpp>
#include <boost/bind/make_adaptable.hpp>

#include <boost/asio.hpp>
//#include <boost/asio/ssl.hpp>


#include <boost/property_tree/ptree.hpp>
#include <boost/random.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/local_time/local_time.hpp>
#include <boost/date_time/time_zone_base.hpp>
#include <boost/circular_buffer.hpp>
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics.hpp>

私は精神を含めていません。それは本当にコンパイル時間を長くします。

4

1 に答える 1

8

GCCのプリコンパイル済みヘッダーは非常に特殊な方法で機能します。特定のソースファイルで使用できるプリコンパイル済みヘッダーファイルは1つだけです。-H特定のヘッダーファイルがプリコンパイル済みバージョンを使用しているかどうかを示すために使用します。

さらに、ヘッダーファイルを使用するソースファイルとまったく同じコンパイラフラグを使用してヘッダーファイルをコンパイルする必要があります。

PCH環境をセットアップする一般的な方法は次のとおりです。

main.cpp:

#include "allheaders.hpp"

int main() { /* ... */ }

allheaders.hpp:

#include <algorithm>
// ... everything you need

コンパイル:

g++ $CXXFLAGS allheaders.hpp                 # 1
g++ $CXXFLAGS -H -c -o main.o main.cpp       # 2
g++ $LDFLAGS -o myprogram main.o             # 3

ステップ1の後、ファイルallheaders.hpp.gchはかなり大きくなるはずです。ステップ2では、-Hフラグは、プリコンパイル済みヘッダーファイルが使用されていることを通知する追加の出力を生成する必要があります。ステップ3は実行可能ファイルをリンクします。

ステップ1は非常に長い時間がかかる可能性がありますが、ステップ2ははるかに高速になるはずです。

于 2012-06-09T12:15:25.727 に答える