You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Makefile中带目录的通用模式规则匹配失效的解决方法问询

GNU Make 特定目录模式规则的通用匹配方案

问题说明

通用模式规则%.txt:可以匹配任意层级路径下的.txt文件,比如执行make foo.txt、make foo/bar/baz.txt都能正常生成对应文件。但定义如下特定目录规则时:

doc/%.txt:
    echo "bla bla" >$@

data/%.txt:
    echo "bla bla bla" >$@

仅能匹配直接位于doc/或data/根目录下的文件(如doc/foo.txt),无法匹配嵌套路径中对应目录下的文件(如foo/bar/doc/baz.txt)。这是因为GNU Make的模式匹配机制中,单个%默认不会匹配包含斜杠的文本,doc/%.txt里的%只能匹配无斜杠的文件名,因此无法覆盖带前置子目录的场景。

解决方案

修改模式规则,使用两个%通配符分别匹配目标路径中特定目录(doc//data/)之前的任意路径部分,以及特定目录之后的文件名部分:

%doc/%.txt:
    echo "bla bla" >$@

%data/%.txt:
    echo "bla bla bla" >$@

该模式可以同时匹配两种场景:

  • 直接位于根目录下的doc//data/文件(如doc/foo.txt,第一个%匹配空字符串,第二个%匹配foo)
  • 嵌套路径中的doc//data/文件(如foo/bar/doc/baz.txt,第一个%匹配foo/bar/,第二个%匹配baz)

此方案无需重复定义规则,也不需要修改目标文件名,完美适配需求。

内容的提问来源于stack exchange,提问作者ovmjm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 23:44:55