Предварительно скомпилированный заголовок создается на каждой марке? - PullRequest
2 голосов
/ 09 сентября 2011

У меня есть очень простой make-файл, который в основном выполняет следующие действия:

# 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)

Но он все равно создается каждый раз: (

Ответы [ 2 ]

5 голосов
/ 09 сентября 2011

Проблема в том, что вы не ссылаетесь на 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)
2 голосов
/ 09 сентября 2011

CORE_PCH находится в предварительных требованиях для obj /%. O, и у него нет никаких предварительных требований, поэтому он всегда создается.Если вы добавите Core.h в предварительные условия для CORE_PCH, об этом следует позаботиться.

...