我在Arch Linux下工作并使用GCC作为我的编译器。我想知道,如果我想制作一个交叉兼容的程序 - 现在我不是在谈论一个基于gui的程序 - 我只是问一般。如何在Linux,Mac Osx和Windows中同时实现交叉兼容的结构,如windows.h?
答案 0 :(得分:0)
就像<windows.h>
这样的事情而言 - 你没有。或者至少,你尽量不去。
如果你最终需要使用GUI,你会想要跨平台的东西(我很确定Qt有很好的跨平台支持,wxWidgets也可能)。无论哪种方式,您的目标是尽可能多地编写标准C ++代码,并尽可能少地调用系统库/ API。
如果您最终需要使用系统API,请将它们包装在函数中,并在这些函数中使用#ifdef
以确保您调用正确的API。通常,您的编译器将提供一些宏,使您可以在一定程度上确定正在运行的操作系统,以及32位与64位。
void DoSomething()
{
#ifdef _WIN32
//do Windows things here
#endif
#ifdef __linux__
//do Linux things here
#endif
}
或者:
void DoSomethingWindows()
{
//private Windows code here
}
void DoSomethingLinux()
{
//private Linux code here
}
void DoSomething()
{
#ifdef _WIN32
DoSomethingWindows();
#endif
#ifdef __linux__
DoSomethingLinux()
#endif
}
如果真的希望得到花哨,您甚至可以为特定于平台的代码设置整个标头。只需使用#ifdef
来确定您的目标操作系统和#include
。
另外,请确保对所涉及的所有系统进行大量测试。系统API不一定在不同的操作系统中具有完美匹配,如果您对给定API的行为方式做出假设但不对其进行测试,那么您可能会遇到麻烦。
答案 1 :(得分:0)
策略可以如下:将所有特定于平台的代码封装在类和typedef中,并编写可与这些类接口一起使用的代码。这些区域通常是:文件,线程,基本类型大小。在这些类中,使用#ifdef。
编写特定于平台的代码#ifdef _WIN32
//...
#else
//...
因此,您可以轻松添加另一个目标平台。