我make在 macOS High Sierra 版本 10.13.6 上的版本如下所示:
$ make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i386-apple-darwin11.3.0
Run Code Online (Sandbox Code Playgroud)
我当前的目录如下所示:
$ ls -1
Makefile
a.txt
b.txt
c.txt
Run Code Online (Sandbox Code Playgroud)
我的Makefile看起来像这样:
*.txt: FORCE
echo Target $@ invoked
FORCE:
Run Code Online (Sandbox Code Playgroud)
我可以Makefile这样使用它:
$ make a.txt
echo Target a.txt invoked
Target a.txt invoked
$ make b.txt
echo Target b.txt invoked
Target b.txt invoked
$ make c.txt
echo Target c.txt invoked
Target c.txt invoked
Run Code Online (Sandbox Code Playgroud)
*.txt这种扩展到当前目录中匹配目标的行为记录在哪里?我尝试搜索手册页和文档,但找不到任何指定我们可以使用全局模式作为目标的内容。我可以依赖我的这种行为Makefile吗?
请参阅GNU make 手册中规则语法的介绍:
目标是文件名,以空格分隔。可以使用通配符(请参阅在文件名中使用通配符)
以及整个部分在文件名中使用通配符。
您不能只查看手册页:手册页仅描述命令行界面以及可能的 makefile 语法的最简单摘要。他们并不试图描述有关如何编写 makefile 的所有内容。
如果您查看了 GNU make 手册但没有找到此内容,我有兴趣了解您搜索的内容以及您期望在哪里找到该信息,以便我们可以考虑改进文档。