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

问题是您没有引用gchby name,并且没有文件 named 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 回答