make --- linux和windows格式

时间:2009-05-21 11:59:06

标签: c makefile nmake

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

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

我已经使用简单的make文件成功完成了这个程序..

但是当我使用具有复杂make文件的复杂C文件时,无法进行编译。

我已经将linux make文件中的'/'更改为'\'在windows中?还有其他变化吗?

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

也是他们之间的区别..

我真的需要那个......

6 个答案:

答案 0 :(得分:5)

不幸的是,nmake只是受到了make的强烈启发,并没有让很多重要事情发生。到目前为止,最简单的方法是首先在两个平台上使用相同的make版本。

在Linux上,Gnu make是默认选项。

在Windows上,Gnu make有几个来源,有些怪癖可供选择。就个人而言,我主要使用native win32 build of Gnu make from the GnuWin32 project。你可能想要在项目的其他部分包围,因为其他一些包也会有用。

其他来源是CygwinMinGW32/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。 / p>

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

nmake应该读取你的makefile,不同之处通常是make版本而不是OS版本。

最大的问题是您的目标平台实际上是什么,您是否尝试使此代码在Windows中本地运行,或者您是否希望在Cygwin下运行它?

答案 4 :(得分:0)

在两个平台上使用gnumake。我做。我多年没碰过过Visual C.

答案 5 :(得分:0)

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