Makefile GNU生成模式规则问题

Makefile GNU生成模式规则问题,makefile,gnu-make,Makefile,Gnu Make,我试图使用GNUMake的模式规则从一个满是头的目录中自动生成预编译头。然而,尽管这个用例很简单,我还是会遇到一些错误 HEADERS=$(patsubst %.h,%.h.gch,$(wildcard *.h)) CXX=g++ WARNINGS=-Wno-unused-result -Wall WARNINGSH=-w CFLAGS=-c -g -flto=8 -fuse-linker-plugin -Ofast -std=c++11 -pthread $(WARNINGS) HFLAGS=

我试图使用GNUMake的模式规则从一个满是头的目录中自动生成预编译头。然而,尽管这个用例很简单,我还是会遇到一些错误

HEADERS=$(patsubst %.h,%.h.gch,$(wildcard *.h))
CXX=g++
WARNINGS=-Wno-unused-result -Wall
WARNINGSH=-w
CFLAGS=-c -g -flto=8 -fuse-linker-plugin -Ofast -std=c++11 -pthread $(WARNINGS)
HFLAGS= $(CFLAGS) $(WARNINGSH)

all: $(HEADERS)

debug: CFLAGS=-c -g3 -ggdb -O0 -std=c++11 -pthread -DSTACK_TRACE $(WARNINGS) \
                -D_GNU_SOURCE
debug: HFLAGS=$(CFLAGS) $(WARNINGSH)
debug: clean all

%.h.ghc : %.h
    $(CXX) $(HFLAGS) $<

clean:
    rm -f *.gch
我在这里遗漏了什么?

问题是:

%.h.gch : %.h
     ^^
    $(CXX) $(HFLAGS) $<
%.h.gch:%.h
^^
$(CXX)$(HFLAGS)$<

您能澄清一下吗?我正在尝试构建预编译头,它的形式明确为
header\u name.h.gch
。你是说模式包含多个句点或其他东西是非法的吗?哦,现在我注意到了。真尴尬。不知怎的,当我试图手动写出这个扩展名时,我总是使用GHC编译器之类的东西:/。谢谢你指出这一点。
%.h.gch : %.h
     ^^
    $(CXX) $(HFLAGS) $<