如何编写Makefile规则过滤Go项目C文件?现有Go文件过滤是否正确?
问题解答
一、当前Go文件过滤方式是否正确?
不正确,核心问题有两点:
- 匹配范围遗漏:你的
wildcard仅匹配了项目根目录的*.go和./subpackage/*.go文件,但需要过滤的./never/gonna/give.go、./never/gonna/give_you_up.go位于never/gonna目录下,根本没被纳入构建文件列表,导致filter-out操作完全无效。 - 路径写法本身没问题:如果后续补上
./never/gonna/*.go的wildcard匹配,当前filter-out里的路径格式是正确的,只要wildcard能命中目标文件,就能完成过滤。
修正后的文件匹配部分应补充目标目录:
$(wildcard *.go) $(wildcard ./subpackage/*.go) $(wildcard ./never/gonna/*.go)
二、如何过滤C文件?
不需要额外做过滤操作,原因如下:
- 当前构建命令里的
wildcard只匹配.go后缀的文件,give.c、give.h这类C相关文件根本不会被加入go build的参数列表。 go build默认不会主动编译C文件,只有启用cgo且代码中存在import "C"时,才会自动处理关联的C文件,这属于cgo的编译逻辑,无需通过文件路径过滤控制。若需排除特定C文件,通常是在cgo的编译标签或CFLAGS中配置,而非在go build的文件列表里操作。
内容的提问来源于stack exchange,提问作者Navidk
相关产品推荐
相关产品推荐

