我将为Windows和Unix OS架构开发一个命令行工具。但是我正面临着一场斗争。如何使代码在Windows和Unix之间有效传输?
Project将使用C ++语言,主要使用MS Visual Studio。但是我希望我的工具是跨平台的,所以我可以在Windows和Unix系统中使用它。由于Unix不支持Visual Studio,我需要在某种程度上设计代码结构以支持这两种体系结构(均为32位),并且需要包含特定于操作系统的头文件,而这只是构建代码的唯一一个OS体系结构。
所以我要求你的帮助。什么是为Windows和Unix维护几乎相同的代码的最有效方法,以及该特定操作系统的所有必需标头?所以我可以在Windows中创建program.exe文件,在Unix中创建program.run文件?测试当前操作系统体系结构(Windows或Unix)并包含依赖于操作系统的标头的一些条件?
编码怎么样?因为Windows命令行使用MS-DOS编码(在中欧,它是DOS代码页852),而Unix终端使用UTF-8编码。我的工具将是多语言的(有贡献者,从我这边开始使用英语和捷克语)。
我需要保持代码结构尽可能小,当然也很容易维护。源代码应该可以从GitHub存储库中用于克隆/派生。
如果这不是适合Stack Overflow的问题,那么告诉我,我会删除它。只是寻求帮助,没有别的。
答案 0 :(得分:3)
步骤1)设置持续集成系统,每次从第一天开始在Windows和Unix上构建代码。最好在每个平台上安装多个编译器。
步骤3)根本不要在程序中使用任何平台特定代码 - 当 时,在各种{{1}下实现多个版本守卫。更喜欢使用跨平台库。
步骤4)确保您有足够的单元测试(尤其用于您必须使用特定于平台的代码多次实现某些内容的位)并确保您的CI系统运行 all 每次提交的测试。
步骤5)确保所有文本从第一天开始都是UTF-8编码 - 转换为其他编码可以在显示层发生,但保持内部所有UTF-8清理。
步骤6)在所有支持的平台上进行广泛的手动测试。
并确保调整每个编译器警告设置并发出警告错误(并修复所有此类错误)。在一个平台上使用一个编译器发出的警告通常可以在另一个平台上使用不同的编译器进行静默编译错误编译。
答案 1 :(得分:0)
首先,Windows控制台可以使用utf-16但不能使用utf-8。其次,如果你坚持使用标准的c ++库,可能需要使用boost进行扩展(必须在windows和任何你要构建的* nix系统上安装),只要你说话,你就不应该有任何问题。关于严格接受执行工作和打印结果的命令行参数。
如果你在谈论终端控制(即在屏幕上除了下一个字符单元以外的地方打印,特别是向后移动),这将会更加困难。
但是,我建议您使用基于cmake的项目,Visual Studio通常使用自定义的msbuild构建管理器,如果您尝试在* nix系统上构建,则无法提供帮助。