Makefile:是否可以使用带斜杠的词干?

Lig*_*gio 4 makefile

我有这些文件:

 tests/prova.txt
 tests/mydir/prova.txt
Run Code Online (Sandbox Code Playgroud)

在我的Makefile 中,我有一个用于打印文件路径的目标(这只是一个示例):

checkf-%:
    echo tests/${@:checkf-%=%}.txt
Run Code Online (Sandbox Code Playgroud)

如果我打电话

make checkf-prova
Run Code Online (Sandbox Code Playgroud)

有用!但如果我打电话

make checkf-mydir/prova
Run Code Online (Sandbox Code Playgroud)

我得到

make: 没有规则来制作目标

如何使用 % 中的斜线调用目标?

Joh*_*ohn 5

词干(%符号)只匹配有效的文件名字符,因此不会匹配包含 / 的字符串。话虽如此,模式规则将在尝试匹配之前去除目录名称,然后在运行配方时重新插入它们,因此:

p%.txt :
    @echo p\%.txt matches $@
Run Code Online (Sandbox Code Playgroud)

将与:

~/tmp> make tests/prova.txt
p%.txt matches tests/prova.txt
Run Code Online (Sandbox Code Playgroud)

(请注意,这是特定于模式规则的。test/prova.txt 将不匹配 prova.txt 目标,但会匹配 p%.txt 目标)。有关更多详细信息,请参阅http://www.gnu.org/software/make/manual/html_node/Pattern-Match.html#Pattern-Match