独立于平台的 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。
我正在尝试编写一个顶级 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。