2

最近、(他の人がプロジェクトを拡張した後) コンパイル時間が大幅に増加したことに気付きました。C++ プリコンパイル済みヘッダーを使用するように提案されました。「include」部分は別ファイル「precompiled.h」に移動

#include <iostream>

#include <stxxl/vector>
#include <stxxl/priority_queue>
#include <stxxl/sort>
#include <stxxl/scan>
#include <stxxl/stream>

#include <string> 
#include <sstream>
#include <cstdlib>
#include <ctime>
#include <cmath>  
#include <vector>   
#include <limits.h>
#include <queue>
#include <algorithm>
#include <numeric>
#include <typeinfo>
#include <fstream>              
#include <cairo.h>
#include <cairo-pdf.h>
#include "myFile1.cpp"
#include "myFile2.cpp"

また、ヘッダー ファイル固有の makefile には次の内容が含まれます。

STXXL_ROOT      ?= /home/mirza/stxxl-1.2.1
STXXL_CONFIG    ?= stxxl.mk
include $(STXXL_ROOT)/$(STXXL_CONFIG)

# use the variables from stxxl.mk

CXX              = $(STXXL_CXX)
CPPFLAGS        += $(STXXL_CPPFLAGS)

# add your own optimization, warning, debug, ... flags
# (these are *not* set in stxxl.mk)
CPPFLAGS        += $(shell pkg-config --cflags cairo)
STXXL_LDLIBS    += $(shell pkg-config --libs cairo)

CPPFLAGS        += -O3 -Wall -g -c -DFOO=BAR

# build your application
# (my_example.o is generated from my_example.cpp automatically)

precompiled.o: precompiled.h
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) precompiled.h -o $@ $(STXXL_LDLIBS)

もちろん、メインの .cpp ファイルの最初の行は "include "precompiled.h"" です。ただし、メイン ファイル固有の make ファイルを実行した後、「precompiled.h」ファイルをコンパイルしたときに得たレポートと警告 (myFile1.cpp myFile1.cpp に関連する警告とレポート) が表示されます。コンパイルプロセスが繰り返されると思います。プリコンパイル済みヘッダーが .gch ファイルに関連付けられていることを読みましたが、これを生成できませんでした。これに関するヘルプは大歓迎です。ありがとう

メインの .cpp ファイルに固有の makefile の内容を含めると役立つと思います。おそらく、このファイルを変更することで、ロードが 1 回行われたことを「コンパイラに伝える」ことができます。

STXXL_ROOT      ?= /home/mirza/stxxl-1.2.1
STXXL_CONFIG    ?= stxxl.mk
include $(STXXL_ROOT)/$(STXXL_CONFIG)

# use the variables from stxxl.mk

CXX              = $(STXXL_CXX)
CPPFLAGS        += $(STXXL_CPPFLAGS)

# add your own optimization, warning, debug, ... flags
# (these are *not* set in stxxl.mk)

CPPFLAGS        += $(shell pkg-config --cflags cairo)
STXXL_LDLIBS    += $(shell pkg-config --libs cairo)


CPPFLAGS        += -O3 -Wall -g -DFOO=BAR

# build your application
# (my_example.o is generated from my_example.cpp automatically)
fileA.bin: fileA.o
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) fileA.o -o $@ $(STXXL_LDLIBS)
4

1 に答える 1

0

GCCがプリコンパイル済みヘッダーであることを認識できるように、precompiled.o: precompiled.hルールを変更する必要がありますprecompiled.h.gch: precompiled.h

于 2011-02-27T10:24:06.557 に答える