C++确定运行平台(安卓、iOS等)。

 2023-01-20    294  

问题描述

作为多平台项目的一部分(到目前为止,Android&iOS),我们共享一个通用的C ++代码库,用于数学和算法要求.

作为Android Developper,我使用同事在iOS项目中使用的标准库(STL)面临几个问题.

C++确定运行平台(安卓、iOS等)。

在我的build.gradle>> android.ndk我使用:cppFlags += “-std=c++11″和stl = ‘gnustl_shared’

作为示例,我不能使用原始stl中的std::nth_element()或std::sort(),我必须包括:bits/algorithmfwd.h或bits/stl_algo.h.

我去了include <bits/stl_algo.h>,到目前为止一切都很好.

问题是,我们共享此代码库,我想知道我们是否可以使用 flags 来识别运行平台,以便该代码动态使用正确的强>包括.

感谢您的帮助!

[更新1]

如/a>尚不清楚我确实正在寻找用于标题文件中的 flags ,以便在编译时(而不是在运行时)执行适当的包含.

如前所述,当前平台是iOS和Android.哪些标志可以帮助我们识别这些平台?

推荐答案

您正在混合编译时间和运行时.

1)包括用于编译时间,因此您可以区分此e. G.通过构建配置,然后选择适当的包含.这也是正常的方式.此外,您可以交换某些文件,还可以使用#IFDEF指令以获取仅在某些平台上可用的功能.

2)至于运行时间,从通用C ++中发现可能有些困难,我建议简单地注入通话代码中的信息:必须有一些地方知道它正在运行的地方,然后,该代码可以在代码中设置一个属性,告诉它在哪里运行.

您可能想去1),尽管已经适当地选择了您的库.

其他推荐答案

如果您只想检查一次目标,则可能需要通过专用的单个标头来包含STL标题.

例如,创建一个文件stl_includes.h,其中包括以下内容:

#ifndef STL_INCLUDES_H
#define STL_INCLUDES_H

#ifndef TARGET_PLATFORM
// Prevent builds without defined target
#error Target platform not defined!
#elif TARGET_PLATFORM == TARGET_IOS
// Your iOS headers here
#include <...>
#elif TARGET_PLATFORM == TARGET_ANDROID
// Your Android headers here
#include <...>
#else
#error Invalid build target!
#endif

#endif

这确保每个构建都必须定义有效的目标平台并使用正确的标题.未知或未定义的目标不会编译.在某些全局标头中定义有效的构建目标,最好是在专用的STL标头以外的其他标题中,以便您也可以在其他平台特定功能中使用它们.

其他推荐答案

根据 ,您需要的是:

#ifdef __ANDROID__
    // Android Headers
#elif __APPLE__
    // iOS Headers
#endif

以上所述是小编给大家介绍的C++确定运行平台(安卓、iOS等)。,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26106.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。