linux - 独立于平台的 Makefile - Windows 和 WSL

标签 linux makefile windows-subsystem-for-linux

我正在尝试编写一个顶级 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/

相关文章:

linux - 在 OpenSuse 12.1 上制作 [GNU-Make gcc 或其他] - 如何完成

c - 简单的ubuntu内核模块make文件错误

mysql - 调用-rc.d : could not determine current runlevel

bash - 如何为 Linux 的 Windows 子系统转换 Windows 路径

c - 获取 GCC 错误 : "sys/memfd.h: No such file or directory"

linux - 将多个文件符号链接(symbolic link)到现有文件夹

mysql - MySQL 服务器和 MySQL 客户端有什么区别

用于列出可用于挂载的文件系统的 Linux 命令?

makefile - makefile 中的 .SHELLFLAGS 赋值

c - 不带 "return"命令返回