[英]Working on a cross platform library
在C ++中编写跨平台库的最佳实践是什么?
我的开发环境是Linux上的Eclipse CDT,但是我的库应该可以在Windows上进行原生编译(例如从Visual C ++)。
谢谢。
在某种程度上,这将取决于您的图书馆要完成的目标。
例如,如果您正在开发GUI应用程序,那么您可能希望专注于使用经过良好测试的跨平台框架,例如wxWidgets 。
如果您的库主要依赖于文件IO,那么您需要确保使用现有经过良好测试的跨平台文件系统抽象库,例如Boost Filesystem 。
如果您的库不属于上述类型(即没有现成的经过良好测试的跨平台框架供您使用),最好的办法是确保尽可能遵守标准C ++(这意味着不要#include <linux.h>
或<windows.h>
)。 如果不可能(即您的库从麦克风读取原始声音数据),您将需要确保给定平台的实现细节被充分抽象掉,以便最大限度地减少将库移植到另一个库所涉及的工作。平台。
根据我的实践经验提出的几点建议:
1)确保定期编译目标平台中的源代码。 不要等到最后。 这有助于尽早指出错误。 使用连续构建系统 - 它使生活更轻松。
2)切勿使用特定于平台的标头。 甚至不用于编写本机代码 - 对于所有你知道的东西,在Windows标题中可能会期望一些字符串在XP中是ABC但在Win7中被改为ABC.12。
3)使用来自STL和BOOST的想法,然后在它们之上构建。 永远不要认为这些是解决问题的灵丹妙药 - STL很容易随你的代码一起提供,但BOOST不是。
4)不要使用像__STDCALL这样的编译器特定结构。 这是在寻求地狱。
5)在g ++和cl中使用类似的编译器选项编译时,相同的代码可能会导致不同的行为。 请准备一份编译器手册。
无论何时我在这样的事情上工作,我都会尝试在我想要支持的不同环境中构建它。 同样,如果您正在创建一个网页,并且您想确保它在IE,Firefox和Chrome中有效,那么您将在所有这三种浏览器中对其进行测试。 在您想要支持的不同环境中进行测试,您将知道可以安全地说它适用的系统。
如上所述的问题有点抽象。但你可以考虑QT
这真的就像“不使用任何特定平台”一样简单。 如今可用的大量免费工具使得用C ++编写跨平台代码变得轻而易举。 对于那些您确实需要使用平台特定API的罕见但偶然的情况,请确保通过#defines将它们分开,或者在我看来,更好地将每个平台的不同.cpp文件分开。
跨平台库有很多替代方案,但我的个人偏好是:
最后一个,CMake,在过去的几年里,对我来说是一个巨大的帮助,可以在Windows和Linux上进行双重开发时保持构建环境的合理性。 它有一个相当陡峭的学习曲线,但一旦它启动并运行,它的效果非常好。
您的意思是除了在目标平台上持续集成和测试之外 或者除了使用设计抽象出实现细节之外?
不,想不出什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.