寻找nmake和makefile结构的介绍[关闭]

Posted

技术标签:

【中文标题】寻找nmake和makefile结构的介绍[关闭]【英文标题】:Looking for introduction of nmake & makefile structure [closed] 【发布时间】:2010-05-26 22:37:06 【问题描述】:

我正在寻找有关 makefile 结构的一些基本信息。任何指针将不胜感激。谢谢。

【问题讨论】:

CMake 比 Make 好。如果您正在寻找创建自己的项目,您可能会对我的 C++ 项目模板感兴趣,它使用 CMake 构建系统并为您处理构建系统等问题:code.google.com/p/cpp-project-template 也就是说,如果你想要 Makefile 教程,这里有一个:sites.google.com/site/michaelsafyan/coding/resources/… 【参考方案1】:

官方NMAKE documentation.

还有其他几种使用“makefile”的构建系统。这里的其他几个答案将您指向这些其他系统。它们都实现了相同的基本思想,但功能和语法有所不同,有时以微妙的方式。如果您需要学习如何使用 NMAKE(即您在标题中提到的那个),并且您阅读了 GNU make 文档,您可能会感到困惑。

【讨论】:

不知道为什么这被否决了。 NMAKE 和 GNU Make 之间的差异很大。 @Brian Neal:似乎有人对这个问题的所有答案投了反对票……【参考方案2】:

我想我能给任何想要学习如何编写自己的 makefile 的人提供的最好帮助是:

不要这样做!!!

使用生成文件生成器。那里有很多。我见过的最好的之一是 CMake,但也有 automake/autoconf/all that。

您还可以使用完全不同的构建系统,例如 Ant(但这是迄今为止该类别中唯一的选择)。

制作实际上有点糟糕。我10年没碰过一个。将您的开发工作放在代码中最能发挥作用的地方。

【讨论】:

好吧,在 Cmake 之前,了解 makefile 是很有用的,了解它在历史上是如何演变的。 Ant 和 make 一样。它同样复杂,基本上在 XML 中定义了自己的语言。 +1 提倡 CMake 胜过 Make。 @Martin,是的,Ant 不是要走的路;对于 Java,应该使用 Maven。其实我觉得Make比Ant更容易理解,而且对于C和C++来说,CMake构建系统绝对是最好的。 是的,我从未使用过 Ant 或 Maven。我简短地看了他们一眼,但从未尝试过。我不是在提倡它们,只是表明它们是一种替代方案。我以前使用过 CMake 并且非常喜欢它。目前我主要只是在我正在使用的 IDE 中使用构建系统。【参考方案3】:

为了快速入门(如果您还没有尝试过)- 阅读this,非常简单。

如果您想在几个小时内开始编写 makefile - this one。

要成为makefile中的怪物,请使用official,通常您需要此作为参考书。

【讨论】:

+1 用于直接链接到 OP 特别要求的资源。不知道为什么有人会否定这个答案。【参考方案4】:

您可能想看看Autobook

【讨论】:

另一个否定值的好答案。 +1 @Noah Roberts:干杯。人们最好拒绝投票来解释他们为什么这样做……就像橙色的小弹出窗口所暗示的那样……【参考方案5】:

我同意大多数早期响应者的观点:不要继续依赖 NMake,使用更新的工具。 Ant、MSBuild、M​​aven、Scons、GNU/autotools 等。但是,如果您真的想了解有关 NMake 的更多信息,请查看 Microsoft Rotor (SSCLI) 源代码发行版,它包含 NMake 的源代码,至少是经过修改的引导转子构建所需的快照。对于 Nmakefile 的更好示例,请查看早期的 Win32 SDK,以及后来的 OS/2 SDK,这是复杂 Nmakefile 的鼎盛时期。

【讨论】:

以上是关于寻找nmake和makefile结构的介绍[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Visual Studio 构建工具 cl.exe 编写 makefile(nmake)

nmake.exe:有没有办法从宏中指定的一组文件中排除一个文件?

如何在makefile(nmake使用的makefile)中加入依赖文件的搜索路径(依赖文件不在当前目录)

使用带有 NMake 样式 Makefile 的 clang-cl 无法回显

Microsoft Visual C++ 的 Makefile

Qt .pro 转换为 nmake Makefiles 无法处理静态库,在 VS2008 解决方案中同样有效