【问题标题】:Compiler version, name, and OS detection in C++C++ 中的编译器版本、名称和操作系统检测
【发布时间】:2011-01-18 13:59:41
【问题描述】:

我需要使用 C++ 检测操作系统名称、编译器名称和编译器版本,因为我需要针对每种情况更改设置。

我该怎么做?

【问题讨论】:

  • 运行时还是编译时? gcc 还是 cl (VS)?

标签: c++ compiler-construction


【解决方案1】:

【讨论】:

    【解决方案2】:

    我建议通过提供 -D_i386 -DENDIAN=1234 -D_linux 在构建脚本中定义平台。但是,如果您仍然认为另一个 predef 项目是您的朋友:

    http://sourceforge.net/apps/mediawiki/predef/index.php?title=Main_Page

    【讨论】:

      【解决方案3】:

      通常您将该任务留给构建环境。如果你可以假设一个 posixy 设置,可以使用像 uname 这样的命令,或者通过任何其他被认为合适的方式。

      【讨论】:

        【解决方案4】:

        您将无法在编译时检测到操作系统。但是,您将能够确定编译器 - 几乎所有编译器都定义了指示它们存在的宏,例如 __GNUC__ 或类似的 GCC 和 MSVC 有 __MSC_VER__ 或类似的东西。您必须查看他们的文档以了解实际的宏名称,我忘记了。

        编辑:为澄清起见,您可以检查包含哪些系统的标题。例如,Windows 标头定义了许多宏,例如 WINNT_VER,它们给出了目标 Windows 的最低版本。但是你无法检测到编译器正在执行的操作系统。

        【讨论】:

        • 使用#ifdef,我根据OS做了条件编译。那么,这不是说编译器找到了底层的OS。我错了吗?
        • @Mahesh:那是 target 操作系统,而不是编译器主机操作系统。
        • 因此,将在其上安装应用程序的终端系统 OS。感谢您的信息。
        猜你喜欢
        • 1970-01-01
        • 2012-02-05
        • 2011-07-08
        • 2019-01-19
        • 1970-01-01
        • 2012-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多