我有一个非常简单的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)
但它每次都会被创造出来:(
答案 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的先决条件中,则应该处理它。