【问题标题】:GNU Make pattern rule issuesGNU Make 模式规则问题
【发布时间】:2017-11-27 13:19:51
【问题描述】:

我正在尝试使用 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.

我在这里错过了什么?

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    问题来了:

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

    【讨论】:

    • 你能澄清一下吗?我正在尝试构建预编译的标头,它明确具有header_name.h.gch 的形式。您是说模式包含多个句点或其他内容是非法的吗?
    • 哦,现在我注意到了。多么尴尬。不知何故,当我试图手动写出这个扩展名时,我总是想到 GHC 编译器或其他东西:/。感谢您指出这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    相关资源
    最近更新 更多