每个make都会创建预编译的头文件?

时间:2011-09-09 17:46:12

标签: c++ gcc makefile g++ precompiled-headers

我有一个非常简单的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)

但它每次都会被创造出来:(

2 个答案:

答案 0 :(得分:5)

问题在于,您没有按名称引用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)

答案 1 :(得分:2)

CORE_PCH是obj /%。o的先决条件,并且它本身没有先决条件,所以它总是被构建。如果将Core.h添加到CORE_PCH的先决条件中,则应该处理它。