我正在尝试编写一个顶级 Makefile,它将进入一个目录并使用其中存在的 make.exe 来创建目标。该项目基于 Eclipse 中的供应商 SDK(因此捆绑了 make 二进制文件)。我想创建一个可以在 Windows cmd 和 WSL (Windows linux) 上运行的通用 Makefile。我已经能够让它单独工作,但我不确定如何让它工作,而不管谁使用哪个平台来运行这个 makefile。
对于 Windows,以下是有效的方法:
all:
cd DIR && make.exe TARGET
在 WSL 上,我使用这个命令:
all:
cd DIR && ./make.exe TARGET
我必须这样做,因为子 makefile 检查使用的二进制文件是否实际上是捆绑的二进制文件,否则会抛出错误。我怎样才能使这个 Makefile 通用?
最佳答案
您可能需要让 Makefile 检测它正在使用的平台并执行单独的命令。以下是您可以如何做到这一点。
ifeq '$(findstring ;,$(PATH))' ';'
UNAME := Windows
else
UNAME := $(shell uname 2>/dev/null || echo Unknown)
endif
UNAME 变量设置为 Linux、Windows 或未知。然后可以在整个 Makefile 的其余部分进行比较,以分隔任何对操作系统敏感的变量和命令。
关键是 Windows 使用分号分隔 PATH 变量中的路径,而 Linux 使用冒号。
当然需要GNU make,或者其他支持所用功能的make。
我发布了处理 Cygwin 和 MSYS2 的此解决方案的更完整版本 here .
关于linux - 独立于平台的 Makefile - Windows 和 WSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55175860/