3

私は非常に単純なmakefileを持っており、基本的に次のことを行います。

# Pre-compiled header
CORE_PCH_FILENAME =Core.h

CORE_PCH: 
        $(CXX) $(CXX_CFLAGS) -x c++-header $(CORE_PCH_FILENAME)

#Objects
obj/%.o: CORE_PCH %.cpp obj/%.d
        @mkdir -p obj
        $(CXX) $(CXX_CFLAGS) -c $*.cpp -o $@

#Dependencies 
obj/%.d: %.cpp
        @mkdir -p obj
        $(CXX) $(CXX_CFLAGS) -MM -MT obj/$*.o -MF $@ $<

私の問題は、初めて作成するときにCore.h.gchが作成され、プロジェクトがビルドされることです。それはいいです。

ただし、何も変更しなくても、makeを再度実行すると、Core.h.gchが再作成され、すべてが再コンパイルされます。

プリコンパイル済みヘッダーがない場合、makeは正常に動作します(何も変更されていない場合は何も再構築せず、変更が加えられた場合に必要なものだけを再構築します)

しかし、私は本当にそのプリコンパイル済みヘッダーが欲しいのですが、私が正しくやっていないことがありますか?

編集:

以下が提案されました:

# Pre-compiled header
$(CORE_PCH_FILENAME) =Core.h
CORE_PCH: $(CORE_PCH_FILENAME)
    $(CXX) $(CXX_CFLAGS) -x c++-header $(CORE_PCH_FILENAME)

しかし、それでも毎回作成されます:(

4

2 に答える 2

6

問題は、 を名前で参照せず、文字どおりgchという名前のファイルがないことです。CORE_PCH試す:

CORE_PCH_FILENAME=Core.h
CORE_PCH=$(CORE_PCH_FILENAME).gch

$(CORE_PCH):
    $(CXX) $(CXX_CFLAGS) -x c++-header $(CORE_PCH_FILENAME)
于 2011-09-09T18:14:49.550 に答える
2

CORE_PCH は obj/%.o の前提条件にあり、それ自体には前提条件がないため、常にビルドされます。Core.h を CORE_PCH の前提条件に追加すると、それが処理されます。

于 2011-09-09T17:55:17.090 に答える