【问题标题】:OS Platform support macros and boost libraryOS平台支持宏和boost库
【发布时间】:2018-09-27 05:07:12
【问题描述】:

我写了下面的代码来检测操作系统,它在 boost 版本 > 1.55 下工作正常,但旧的 bo​​ost 库(例如 1.48)不支持操作系统宏。

以下是在 boost >= 1.55 下正常工作的示例代码。

std::string GetOSPlatform()
{
    std::string platformStr = "Unknown";

     #if defined(BOOST_OS_MACOS) || defined(BOOST_OS_IOS)
         platformStr = "osx";
     #endif
     #if defined(BOOST_OS_WINDOWS)
         platformStr = "windows";
         #if BOOST_ARCH_X86_64
           platformStr += "-x64";
         #endif
     #endif
     #if defined(BOOST_OS_UNIX) || defined(BOOST_OS_LINUX)
         platformStr = "linux";
         #if BOOST_ARCH_X86_64
           platformStr += "-x64";
         #endif
     #endif
     #if BOOST_OS_SOLARIS
         platformStr = "solaris";
         #if BOOST_ARCH_SPARC
           platformStr += "-sparc";
         #else
           platformStr += "-x64";
         #endif
     #endif
     #if BOOST_OS_HPUX 
         platformStr = "hp-ux";
     #endif

     return platformStr;
}

int main()
{
    std::string pltform = GetOSPlatform();
    std::cout << "platform....." << pltform << std::endl;
    return 0;
}

boost 版本

有什么建议吗?

【问题讨论】:

  • 为什么要添加“c”标签?盲目应用前请阅读标签说明!
  • 您必须大致实现 v1.55 或更高版本的宏自己实现的内容。如果旧版本不提供它们,您将不得不这样做。或者坚持将机器升级到 Boost 1.55 或更高版本。要求升级可能更容易。
  • 顺便说一句:您为什么关心五年前 (boost.org/users/history) 发布的 Boost 版本?另外,根据您的问题所缺少的“作品”的定义,上面的代码确实有效!请阅读How to Ask 并更具体地了解您的目标。
  • @UlrichEckhardt 我担心早期版本,因为 centOS 6 为旧版本提供了 yum,所以我需要验证所有版本的 boost。

标签: c++ boost


【解决方案1】:

为了使代码正常工作,您需要根据您正在运行的 Boost 版本添加一些条件编译。如果是 1.55 或更高版本,您只需按原样编译代码。如果是较早的版本,您只需复制更高版本的 Boost 在本地使用的操作系统检测代码,例如只需从更高版本中复制代码即可。

【讨论】:

    猜你喜欢
    • 2011-06-28
    • 2015-03-26
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2017-06-05
    相关资源
    最近更新 更多