目录结构:
src
├── Makefile
├── grpc
│ ├── grpc_demo5_client.go
└── └── grpc_demo5_server.go
制作文件:
groc/test: groc/grpc_demo5_client.go
groc/%:
echo $@ " - " $^
输出结果:
echo groc/grpc_demo5_client.go " - "
groc/grpc_demo5_client.go -
echo groc/test " - " groc/grpc_demo5_client.go
groc/test - groc/grpc_demo5_client.go
文档
隐式规则可以应用于与其模式匹配的任何目标, 但它仅适用于目标没有另行指定的配方, 并且只有在可以找到先决条件时。
我认为文件groc/grpc_demo5_client.go
不是目标.
我的问题是为什么echo groc/grpc_demo5_client.go " - "
和groc/grpc_demo5_client.go -
出现在输出结果中?
更多文档来自与您的文档相同的来源:
When a target is a file, it needs to be recompiled or relinked if any of its
prerequisites change. In addition, any prerequisites that are themselves automatically
generated should be updated first.
由于groc/test
依赖于groc/grpc_demo5_client.go
,groc/grpc_demo5_client.go
成为必须自己生成的目标。如果没有这种递归行为,make
就不会那么有用。
在更多的文档中,它说:
If none of the explicit rules for a target has a recipe, then make searches for
an applicable implicit rule to find one
您的第一条规则没有配方,因此第二条规则中的配方用于groc/grpc_demo5_client.go
。
但也许你的问题是你的 Makefile 中有错别字,groc
应该grpc
。尝试:
grpc/test: grpc/grpc_demo5_client.go
grpc/%:
echo $@ " - " $^