开发跨平台程序时,有时需要根据不同操作系统编写不同的代码,在编译的时候得选择不同的代码进行编译.
例子
QString ShaderLoader::getVert()
{
#ifdef __x86_64__
return ":/shader/vert.vsh";
#elif defined __aarch64__
return ":/shader/vert_es.fsh";
#else
#error "unknown platform"
#endif
}
判断操作系统的宏
操作系统 | 公共定义 | 64位系统定义 |
---|---|---|
Windows | _WIN32 | _WIN64 |
macOS | __APPLE__ | __LP64__ |
Linux | __linux__ | __LP64__ |
Android | __ANDROID__ | __LP64__ |
判断平台的宏
编译器 | 编译器定义 | x86指令集 | AMD64指令集 | ARM32指令集 | Thumb指令集 | ARM64指令集 |
---|---|---|---|---|---|---|
MSVC | _MSC_VER | _M_IX86 | _M_X64 | _M_ARM | _M_THUMB | _M_ARM64 |
GCC | __GNUC__ | __i386__ | __x86_64__ | __arm__ | __thumb__ | __aarch64__ |
Clang | __clang__ | __i386__ | __x86_64__ | __arm__ | __thumb__ | __aarch64__ |
参考
https://blog.virbox.com/?p=54
https://blog.csdn.net/qq_40340448/article/details/122117270