不幸的是,nmake 只是受到 make 的粗略启发,而且他们并没有把很多重要的事情做对。到目前为止,最简单的做法是从在两个平台上使用相同风格的 make 开始。
在 linux 上,Gnu make 是默认和最佳选择。
在 Windows 上,有几个 Gnu make 的来源,有一些怪癖可供选择。就个人而言,我主要使用来自 GnuWin32 项目的 Gnu make 的本机 win32 构建。您可能想要查看项目的其他包,因为其他一些包也很有用。
替代来源是Cygwin和MinGW32/MSYS。
Cygwin 是在 Windows 内核之上提供 *nix 兼容环境的可靠尝试。它由一个 DLL 组成,该 DLL 导出了大量通过 Windows API 实现的 *nix(尤其是 POSIX)系统调用。该 DLL 对磁盘安装也有自己的想法,并且更喜欢 *nix 样式的路径名。DLL 本身是 GPL 许可的(尽管商业使用许可是收费的),并且在 Cygwin 环境中构建的程序默认需要它,因此这是一个需要考虑的因素。另一个因素是 Cygwin 对普通 Windows 用户不友好,因此基于它的开发项目通常最终对于非 unix 用户来说很难处理。然而,对于跨平台开发人员来说,Cygwin 非常有用,因为它可以为您提供 Makefile 所需的所有常见的可疑实用程序,
MinGW32 是一个移植项目,它在移植 GCC 编译器以作为本机 Windows 可执行文件运行方面做得非常好。如果与它们提供的头文件一起使用,则可以通过现代 Windows 安装附带的 C 运行时 DLL 使用几乎所有 Windows API。
MSYS 是 Cygwin 的轻量级分支,它包含一组最小的实用程序(以 *nix shell 开头),通常假定典型的 *nix Makefile 存在这些实用程序。与 Cygwin 不同,MSYS 被配置为默认目标是本机 Windows API。
我在这里试图暗示并且可能应该直截了当地说明的是,您的兼容性问题不会以使您使用的方言结束。
Makefile 语言本身高度依赖于可用的命令 shell,大多数严肃的项目 Makefile 最终使用许多 *nix 核心实用程序,例如 cp 和 rm。
我强烈建议从 make 的 GnuWin32 构建开始,并安装 MinGW32 和 MSYS。然后编写一个在 MSYS 和 linux 下都可以工作的 Makefile 相对容易,并且只需要少量特定于平台的逻辑。