预编译头文件在每次制作时都被创建

Pre-compiled header gets created on every make?

本文关键字:创建 编译 文件      更新时间:2023-10-16

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

但是它仍然每次都被创建:(

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

CORE_PCH在obj/%的先决条件中。它本身没有先决条件,所以它总是被建立起来。如果将Core.h添加到CORE_PCH的先决条件中,应该就可以了。