GNU制作模式规则问题

时间:2017-11-27 05:11:59

标签: makefile gnu-make

我正在尝试使用GNU Make的模式规则从一个充满标头的目录中自动生成预编译的头文件。但是,尽管这种用例很简单,但我收到了错误。

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

运行$ make会导致错误

make: *** No rule to make target 'my_header.h.gch', needed by 'all'.  Stop.

我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

问题在于:

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