2

我遇到了一个大问题..我在 Linux OS 中使用 linux make 文件编译了我的 c 文件。

我想通过命令提示符使用相同的 make 文件在 Windows 中编译相同的文件。为此,我也有 nmake 实用程序和 Cygwin 实用程序。

我用简单的 make 文件的简单程序成功地做到了这一点..

但是当我使用复杂的 C 文件和复杂的 make 文件时无法编译。

我已将 linux make 文件中的“/”更改为 windows 中的“\”?还有什么变化吗?

我想知道“Windows 中是否有任何特殊的 make 文件格式?”

还有他们的区别。。

我真的很需要那个...

4

6 回答 6

5

不幸的是,nmake 只是受到 make 的粗略启发,而且他们并没有把很多重要的事情做对。到目前为止,最简单的做法是从在两个平台上使用相同风格的 make 开始。

在 linux 上,Gnu make 是默认和最佳选择。

在 Windows 上,有几个 Gnu make 的来源,有一些怪癖可供选择。就个人而言,我主要使用来自 GnuWin32 项目的 Gnu make 的本机 win32 构建。您可能想要查看项目的其他包,因为其他一些包也很有用。

替代来源是CygwinMinGW32/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 相对容易,并且只需要少量特定于平台的逻辑。

于 2009-05-21T22:24:45.277 回答
1

您应该考虑使用 CMake 进行跨平台制作,但您真正的问题是您不必将“/”更改为“\”。如果您在 cygwin 或 msys(推荐)下运行,则应该为您处理。

于 2009-05-21T12:03:45.610 回答
1

NMake 是一个windows 工具,只会解析windows 风格的路径,即带有驱动器号和反斜杠的路径。因此,您应该使用与 cygwin 一起安装的 GNU Make。

于 2009-05-21T12:10:41.257 回答
0

nmake 应该可以读取您的 makefile,差异通常在 make 版本之间而不是操作系统之间。

最大的问题是你的目标平台实际上是什么,你是想让这段代码在 Windows 上本地运行,还是想在 Cygwin 下运行它?

于 2009-05-21T12:01:56.050 回答
0

在两个平台上都使用 gnumake。我愿意。我已经很多年没有接触过 Visual C 了。

于 2009-05-21T12:03:42.770 回答
0

nmake 有它自己的格式而不是 windows 本身,因此 makefile 格式与 make 工具而不是 os 有关。对于简单的事情,g(nu)make 和 nmake 的格式相似,正如人们在考虑仅使用 gmake 之前建议的那样。

于 2009-05-21T12:16:16.847 回答