make---linux和windows格式
Posted
技术标签:
【中文标题】make---linux和windows格式【英文标题】:make---linux and windows formats 【发布时间】:2009-05-21 11:59:05 【问题描述】:我遇到了一个大问题..我在 Linux 操作系统中使用 linux make 文件编译了我的 c 文件。
我想通过命令提示符使用相同的 make 文件在 Windows 中编译相同的文件。为此,我也有 nmake 实用程序和 Cygwin 实用程序。
我已经用简单的程序和简单的 make 文件成功地做到了..
但是当我使用复杂的 C 文件和复杂的 make 文件时无法编译。
我已将 linux make 文件中的 '/' 更改为 windows 中的 '\'?还有什么变化吗?
我想知道'windows中是否有任何特殊的make文件格式?'
还有它们之间的区别..
我真的很需要那个......
【问题讨论】:
你确定问题出在makefile的格式上吗?您的 makefile 可能会引用一些 Windows 上不存在的 Linux 库或尝试运行某些东西,例如对于与 mysql 的链接,通常运行“mysql_config --libs”以获取 MySQL 库列表。 NMake 与 make 的任何 *nix 版本的不兼容比各种 *nix 版本彼此之间的不兼容。尽管可以编写与 NMake 和 make 一起使用的文件,但不值得付出努力,因为有几个真正的 make 可用于 Windows。一旦选择了make,就会出现其余命令的问题。 【参考方案1】:不幸的是,nmake 只是从 make 中得到了松散的启发,而且他们并没有把很多重要的事情做对。到目前为止,最简单的做法是从在两个平台上使用相同风格的 make 开始。
在 linux 上,Gnu make 是默认和最佳选择。
在 Windows 上,有几个 Gnu make 的来源,有一些怪癖可供选择。就个人而言,我主要使用native win32 build of Gnu make from the GnuWin32 project。您可能想看看项目的其他包,因为其他一些包也很有用。
其他来源是Cygwin 和MinGW32/MSYS。
Cygwin 是在 Windows 内核之上提供 *nix 兼容环境的可靠尝试。它由一个 DLL 组成,该 DLL 导出了大量通过 Windows API 实现的 *nix(尤其是 POSIX)系统调用。该 DLL 对磁盘安装也有自己的想法,并且更喜欢 *nix 样式的路径名。 DLL 本身是 GPL 许可的(尽管商业使用许可是收费的),并且在 Cygwin 环境中构建的程序默认需要它,因此这是一个需要考虑的因素。另一个因素是 Cygwin 对普通 Windows 用户不友好,因此基于它的开发项目通常对于非 unix 用户来说很难处理。然而,对于跨平台开发人员来说,Cygwin 非常有用,因为它可以为您提供 Makefile 所需的所有常见的可疑实用程序,并且它包括 MinGW32 本机针对 Windows 的 GCC 以及针对 Cygwin 环境的 GCC。
MinGW32 是一个移植项目,它在移植 GCC 编译器以作为本机 Windows 可执行文件运行方面做得非常好。如果与它们提供的头文件一起使用,则可以通过现代 Windows 安装附带的 C 运行时 DLL 使用几乎所有 Windows API。
MSYS 是 Cygwin 的轻量级分支,它包含一组最小的实用程序(以 *nix shell 开头),通常假定典型的 *nix Makefile 存在这些实用程序。与 Cygwin 不同,MSYS 被配置为默认目标是本机 Windows API。
我在这里试图暗示并且可能应该直截了当地说明的是,您的兼容性问题不会以 make you use 的方言结束。
Makefile 语言本身高度依赖于可用的命令 shell,大多数严重的项目 Makefile 最终都使用许多 *nix 核心实用程序,例如 cp 和 rm。
我强烈建议从 GnuWin32 构建开始,并安装 MinGW32 和 MSYS。那么编写一个在 MSYS 和 linux 下都可以工作的 Makefile 相对容易,并且只需要少量的特定于平台的逻辑。
【讨论】:
【参考方案2】:您应该考虑使用 CMake 进行跨平台制作,但您真正的问题是您不必将“/”更改为“\”。如果您在 cygwin 或 msys(推荐)下运行,则应该为您处理。
【讨论】:
更不用说 Windows 将正斜杠解释为目录分隔符和反斜杠一样,因此(除非行为不佳的程序搞砸了自己的路径解析)“命令 C:/some/ thing" 与 "command C:\some\thing" 的作用相同。【参考方案3】:NMake 是一个 windows 工具,将只解析 windows 样式的路径,即带有驱动器号和反斜杠的路径。因此,您应该使用与 cygwin 一起安装的 GNU Make。
【讨论】:
【参考方案4】:nmake 应该可以读取您的 makefile,差异通常在 make 版本之间而不是操作系统之间。
最大的问题是您的目标平台实际上是什么,您是想让这些代码在 Windows 中原生运行还是希望在 Cygwin 下运行它?
【讨论】:
谢谢..我正在使用 NMAKE.EXE 1.50 ...我认为这就是问题所在。我还在命令提示符下给出了路径集 PATH=C:\cygwin\bin;%PATH% 。我想知道它们之间是否有任何格式/语法差异? 我不太了解nmake,所以请咨询以下一位。如果可能的话,我建议您从该答案中删除已接受的答案并将其应用于以下答案之一。他们当然比我更值得接受。【参考方案5】:在两个平台上都使用 gnumake。我愿意。我已经很多年没有接触过 Visual C 了。
【讨论】:
【参考方案6】:nmake有自己的格式而不是windows本身,所以makefile格式与make工具有关,而不是与操作系统有关。对于简单的事情,g(nu)make 和 nmake 的格式相似,正如人们在考虑仅使用 gmake 之前建议的那样。
【讨论】:
只针对非常基本的东西以上是关于make---linux和windows格式的主要内容,如果未能解决你的问题,请参考以下文章