对于大学课程,我必须编写一个应该在Linux和Windows上运行的http服务器。 我有一台简陋的Linux机器,我认为它无法处理任何繁重的虚拟环境,我也不愿意经历安装它的麻烦。
这是我的第一个足够复杂的项目(估计需要大约1.5个月),需要一个足够舒适的环境,以便在短编码和测试会话之间快速交替(当然,后者在两个平台上)。
所以,我想知道这种情况最好的设置是什么。我认为在Wine上测试它会没问题(毕竟这不是现实世界的事情),我为Windows目标部分安装了MinGW。
基本上,一个编写良好的简单makefile可以解决我的问题...它应该构建Linux和Windows二进制文件并将它们放在相应的文件夹(Wine子树中的Windows)中,我就是全部完成了!但是我对这件事感到非常缺乏经验,我真的不知道从哪里开始。也许制作手册,啊哈!:)
思考,建议,我没想到/知道的任何事情! 谢谢!
(PS。我打算使用emacs作为编辑器,或者也许可以学习vim。除非eclipse提供某种类似天网的插件,完全解决了这个问题......)。
答案 0 :(得分: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 jungle(基本上只是为Linux启用了一些额外的调试功能),Makefile也很简单,没有复杂的交叉编译处理,只是是否应该覆盖CC等的可能性。由于许多重要的开源软件都是以这种方式编写的(特别是桌面和嵌入式设备使用的软件),您还应该能够找到许多关于如何正确设置构建环境的其他示例。
至于在Windows上测试应用程序,我认为最好的选择是你能以某种方式找到真正的Windows机器。如果您正确地执行所有操作,它应该与在Linux上运行相同,并且您不需要在两个操作系统上连续测试您的应用程序。如果无法在Windows机器上进行测试,那么VM将是下一个最佳选择,尽管设置它可能更加困难。 Wine是一个很好的备份计划,但如果您只在Wine上进行测试,我认为您不能确定您的应用程序在Windows上运行良好。