【问题标题】:Using nmake on OSX?在 OSX 上使用 nmake?
【发布时间】:2011-03-29 19:54:12
【问题描述】:

我正在将一个应用程序移植到 MacOS X - 但原始开发人员的构建系统使用 NMAKE,理想情况下他们希望保留它而不是切换到新的。

我已经设法让 NMAKE 在 OSX 下使用 wine(使用 MacPorts 构建)运行,并为构建文件添加了 Objective C 支持,并创建了一个与 Unix 链接的 PE 包装器“run.exe”,wine 可以加载但使用 POSIX回调 gcc 和 ld 之类的东西,正如网上各个地方所描述的那样,作为一种从 wine 中逃回 Unix 的方法。

但是,我遇到了一些具体问题。它们足够小,我可以继续移植,但这确实意味着我有时需要运行几次构建,​​因为时间关系。

基本上,当 wine.exe 回调到 shell 和 gcc 时,子进程之间的链接似乎被破坏了。 gcc 和 ld 即使在失败时也永远不会返回错误代码,因为它们无法从生成的孩子那里获得退出代码。 ar 实际上会打印出它找不到它的孩子并立即返回,当 ld 尝试将目标文件链接到仍在组合中的库时会导致问题。

有没有其他人在 OSX 或其他地方尝试过类似的事情并看到同样的问题?有明显的解决办法吗?

【问题讨论】:

  • 轻松生活,改用 CMake 之类的东西?或维护单独的构建系统:xcode、visual studio、autotools 或原始 gnu makefile——对我来说,你所做的并不是未来的证明
  • 可以选择切换到全新的构建系统,但显然他们想要在 Windows 和 OSX 上都可以工作的东西,强烈反对维护多个系统。他们确实也非常喜欢坚持使用 nmake,因为这就是他们的习惯:) 我认为如果不是因为 wine child 进程问题,这将是一个完全面向未来的解决方案。

标签: macos nmake wine


【解决方案1】:

Microsoft .NET Rotor (SSCLI) 项目包括源代码,旨在构建在 OSX 和其他地方。转子源代码包括 NMake 的源代码。所以让Rotor工作,然后使用它的Nmake。即使您更喜欢继续使用基于 Wine 的 Nmake,您也可以从 Rotor 在 Unix 上使用 Nmake、它使用 Gcc 等学习。

【讨论】:

  • 这是完美的,谢谢!在对稍微老化的代码进行大量修改、调整代码和绕过 Microsoft 的构建脚本之后,我现在有了一个闪亮的 nmake 二进制文件,它是 OSX 的本机并且可以完美运行。除了我必须修复的所有东西和完全损坏的构建之外,微软在包装 OSX(和 Unix)方面做得非常好。
  • 很高兴它有帮助。您应该在某处发布您的更改,以便其他人可以从您的工作中受益!
【解决方案2】:

如果原始开发人员构建系统没有什么奇怪/不一致的地方,您能否编写将他们的 make 文件自动转换回 Unix make 并保持您的构建“原生”?

(无论如何构建都足够令人担忧,没有额外的复杂性)

【讨论】:

  • 我已经考虑过制作转换器的想法,但我担心它本身可能会成为一项主要工作 - 特别是当 nmake-in-wine 解决方案几乎 工作得很好——nmake 甚至似乎可以不假思索地处理 Unix 风格的路径,这只是一个奇怪的葡萄酒问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 2010-10-16
  • 2018-10-01
相关资源
最近更新 更多