windows - 在 Linux 上设置针对 Linux 和 Windows 的开发环境

标签 windows linux cross-platform development-environment

对于大学类(class),我必须编写一个应该在 Linux 和 Windows 上运行的 http 服务器。 我有一台不起眼的 Linux 机器,我认为它无法处理任何类型的繁重虚拟环境,我也不愿意经历安装它的麻烦。

这是我的第一个足够复杂的项目(我估计大约需要 1.5 个月的时间来开发),需要一个足够舒适的环境来在简短的编码和测试 session (当然,后者在两个平台上)之间快速切换。

所以,我想知道什么是针对这种情况的最佳设置。我认为在 Wine 上测试它是可以的(毕竟这不是真实世界的事情),并且我为 Windows 目标部分安装了 MinGW。

基本上,一个编写良好的简单 makefile 可以解决我的问题...它应该构建 Linux 和 Windows 二进制文件并将它们放在各自的文件夹中(Wine 子树中的 Windows 文件夹),我就完了完毕!但是感觉这东西很没经验,真的不知道从何下手。也许是制作手册,啊!:)

想法、建议,以及任何我没想到/不知道的事情! 谢谢!

(PS。我打算使用emacs作为编辑器,或者学习vim。除非eclipse提供某种类似天网的插件来完全解决这个问题...:)

最佳答案

您走在正确的轨道上。多亏了 MinGW,它并没有那么复杂,真的。您基本上需要两件事:

  1. 代码必须可以跨操作系统移植。 MinGW 有一些 POSIX 支持,但您可能需要使用 Cygwin为了能够使用 POSIX 接口(interface)或拥有自己的兼容层来与操作系统交互。我可能会选择 Cygwin,因为这样你就可以只针对 POSIX 进行编码,而不必测试和调试你的兼容层。另外,请确保您不会使用任何特定于操作系统的外部库。不可移植的代码通常会导致编译错误,但无论如何都要确保对应用程序进行全面测试。

  2. 针对 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 上运行良好。

关于windows - 在 Linux 上设置针对 Linux 和 Windows 的开发环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9040880/

相关文章:

c++ - 如何在 Restinio 中使用 POST 处理程序?

c - 如何使用非阻塞方式检查stdin是否为空

c# - 如何抓取图像并将其保存在文件夹中[c# windows应用程序]

linux - 连接字符设备和物理PCIe驱动

c++ - 如何为 win32 构建 wxmathPlot?

C 文件描述符复制而不共享偏移量或标志

linux - Linux 中的目录大小。性能问题

java - 应用程序配置文件

python - 用户是否可以在不下载 Python 的情况下打开我的程序?

c++ - 交叉编译 Ubuntu 到 Beaglebone 后无法在目标上找到共享库