在 Linux 上设置针对 Linux 和 Windows 的开发环境
Posted
技术标签:
【中文标题】在 Linux 上设置针对 Linux 和 Windows 的开发环境【英文标题】:Set up a development environment on Linux targeting Linux and Windows 【发布时间】:2012-01-27 22:25:59 【问题描述】:对于大学课程,我必须编写一个应该在 Linux 和 Windows 上运行的 http 服务器。 我有一台不起眼的 Linux 机器,我认为它无法处理任何类型的繁重虚拟环境,我也不愿意经历安装它的麻烦。
这是我的第一个足够复杂的项目(我估计大约需要 1.5 个月的开发时间),需要一个足够舒适的环境,以便在简短的编码和测试会话之间快速切换(当然,后者在两个平台上)。
所以,我想知道什么是最适合这种情况的设置。我认为在 Wine 上测试它是可以的(毕竟这不是现实世界的事情),我为 Windows 目标部分安装了 MinGW。
基本上,一个简单的编写良好的 makefile 可以解决我的问题......它应该构建 Linux 和 Windows 二进制文件并将它们放在各自的文件夹中(Wine 子树中的 Windows 文件夹),我就是完毕!但是我对这件事感到非常缺乏经验,我真的不知道从哪里开始。也许是制作手册,啊哈!:)
想法、建议、任何我没想到/不知道的事情! 谢谢!
(PS。我打算用emacs作为编辑器,或者学习vim。除非eclipse提供某种类似skynet的插件来完全解决这个问题......:)
【问题讨论】:
【参考方案1】:你在正确的轨道上。真的,感谢MinGW,这并不复杂。你基本上需要两件事:
代码必须可跨操作系统移植。 MinGW 有一些 POSIX 支持,但您可能需要使用 Cygwin 才能使用 POSIX 接口,或者拥有自己的兼容层来与操作系统交互。我可能会选择 Cygwin,因为那时您只能针对 POSIX 进行编码,而不必测试和调试您的兼容性层。此外,请确保您不会使用任何特定于操作系统的外部库。不可移植代码通常会导致编译错误,但请务必彻底测试应用程序。
面向 Linux 和 Windows 的工具链。您已经拥有它们,您只需要正确使用它们。通常,在交叉编译期间调用工具链时,您会使用像 $(CROSS_COMPILE) 这样的变量作为前缀。因此,在为 Linux 编译时,您调用 gcc、ld 等(使 CROSS_COMPILE 变量为空),而在为 Windows 编译时,您调用例如i486-mingw32-gcc、i486-mingw32-ld等,即CROSS_COMPILE=i486-mingw32-。或者只是根据目标定义 CC、LD 等。
我在 Linux 上编写了一个小游戏,并让它在 Windows 上也能运行。如果你browse the code,你可以看到代码几乎没有#ifdef丛林(基本上只是为Linux启用了一些额外的调试功能),而且Makefile也很简单,没有复杂的交叉编译处理,只是可能性像它应该的那样覆盖 CC 等。由于许多重要的开源软件都是以这种方式编写的(尤其是桌面和嵌入式设备使用的软件),您还应该能够找到许多其他有关如何正确设置构建环境的示例。
至于在 Windows 上测试应用程序,我认为最好的选择是你能以某种方式找到一台真正的 Windows 机器。如果你做的每件事都正确,它应该像在 Linux 上一样运行,你不需要在两个操作系统上持续测试你的应用程序。如果无法在 Windows 机器上进行测试,那么 VM 将是下一个最佳选择,尽管设置它可能会更加困难。 Wine 是一个很好的备份计划,但我认为如果您只在 Wine 上进行测试,您不能确定您的应用程序在 Windows 上运行良好。
【讨论】:
MinGW 从什么时候开始为 Windows 提供 POSIX 实现?参考??以上是关于在 Linux 上设置针对 Linux 和 Windows 的开发环境的主要内容,如果未能解决你的问题,请参考以下文章