Windows编译Grafana Tempo报错:GO111MODULE未被识别
下面逐个解析你遇到的报错信息:
FIND: Parameter format not correct与File not found - "*.yaml"
Windows自带的find命令功能和Linux版本完全不同——Windows的find是用来在文件内容中搜索文本的,而Makefile里用了Linux风格的find语法去查找yaml文件,参数不匹配直接触发格式错误;同时Windows下通配符的处理逻辑和Linux不一致,导致无法识别"*.yaml"这种写法,抛出文件未找到的错误。no Go files in ....\tempo
Makefile采用了Linux的相对路径处理逻辑,或者你执行make tempo时的工作目录不正确,导致程序找不到./cmd/tempo下的Go源码文件;也有可能是前面的find命令执行失败,影响了后续的路径判断逻辑。process_begin: CreateProcess(NULL, uname -s, ...) failed.uname是Linux/Unix系统专属命令,用于获取操作系统类型信息,Windows系统没有这个命令,Makefile里调用它来判断运行环境,自然执行失败。Makefile:51: pipe: Bad file descriptor与'.' is not recognized as an internal or external command
这两个错误源于Makefile使用了Linux Shell的语法:比如管道符(|)、.命令(Linux中用于执行脚本),这些语法在Windows的CMD或PowerShell中不被支持,直接触发执行失败。'GO111MODULE' is not recognized as an internal or external command
Windows CMD环境不支持VAR=value command这种Linux风格的临时环境变量设置方式——这种写法会被系统当成一个完整的可执行命令,而系统找不到名为GO111MODULE的程序。即便你全局设置了GO111MODULE环境变量,Makefile里的这种写法在Windows下依然不兼容。
核心原因
这些报错本质是Grafana Tempo的Makefile是为Linux/Unix环境编写的,未适配Windows命令行语法,Linux下的命令、变量设置、Shell语法在Windows环境中无法直接运行。
内容的提问来源于stack exchange,提问作者Mandroid

