【发布时间】:2011-01-18 13:59:41
【问题描述】:
我需要使用 C++ 检测操作系统名称、编译器名称和编译器版本,因为我需要针对每种情况更改设置。
我该怎么做?
【问题讨论】:
-
运行时还是编译时? gcc 还是 cl (VS)?
我需要使用 C++ 检测操作系统名称、编译器名称和编译器版本,因为我需要针对每种情况更改设置。
我该怎么做?
【问题讨论】:
【讨论】:
我建议通过提供 -D_i386 -DENDIAN=1234 -D_linux 在构建脚本中定义平台。但是,如果您仍然认为另一个 predef 项目是您的朋友:
http://sourceforge.net/apps/mediawiki/predef/index.php?title=Main_Page
【讨论】:
通常您将该任务留给构建环境。如果你可以假设一个 posixy 设置,可以使用像 uname 这样的命令,或者通过任何其他被认为合适的方式。
【讨论】:
您将无法在编译时检测到操作系统。但是,您将能够确定编译器 - 几乎所有编译器都定义了指示它们存在的宏,例如 __GNUC__ 或类似的 GCC 和 MSVC 有 __MSC_VER__ 或类似的东西。您必须查看他们的文档以了解实际的宏名称,我忘记了。
编辑:为澄清起见,您可以检查包含哪些系统的标题。例如,Windows 标头定义了许多宏,例如 WINNT_VER,它们给出了目标 Windows 的最低版本。但是你无法检测到编译器正在执行的操作系统。
【讨论】:
#ifdef,我根据OS做了条件编译。那么,这不是说编译器找到了底层的OS。我错了吗?
OS。感谢您的信息。