独立于平台的 Makefile - Windows 和 WSL

Platform independent Makefile - Windows and WSL

我正在尝试编写一个顶级 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 的其余部分进行比较,以分隔任何 OS 敏感变量和命令。

关键是 Windows 在 PATH 变量中使用分号分隔路径,而 Linux 使用冒号。

当然需要GNU make,或者其他支持所用功能的make。

我发布了处理 Cygwin 和 MSYS2 的此解决方案的更完整版本 here