代码之家  ›  专栏  ›  技术社区  ›  PierreBdR

如何在编译时测试GCC的当前版本?

  •  40
  • PierreBdR  · 技术社区  · 17 年前

    我想根据GCC的版本包含一个不同的文件。更确切地说,我想写:

    #if GCC_VERSION >= 4.2
    #  include <unordered_map>
    #  define EXT std
    #elif GCC_VERSION >= 4
    #  include <tr1/unordered_map>
    #  define EXT std
    #else
    #  include <ext/hash_map>
    #  define unordered_map __gnu_cxx::hash_map
    #  define EXT __gnu_cxx
    #endif
    

    我不在乎3.2之前的gcc。

    我很确定在预处理时定义了一个变量,只是我再也找不到它了。

    3 回复  |  直到 8 年前
        1
  •  58
  •   luke    17 年前

    有许多宏应该根据您的需求进行定义:

    __GNUC__              // major
    __GNUC_MINOR__        // minor
    __GNUC_PATCHLEVEL__   // patch
    

    版本格式为major.minor.patch,例如4.0.2

    这些文件可以在 here .

        2
  •  33
  •   PierreBdR    17 年前

    好的,经过多次搜索,一种可能的方法是使用 __GNUC_PREREQ 定义于 features.h .

    #ifdef __GNUC__
    #  include <features.h>
    #  if __GNUC_PREREQ(4,0)
    //      If  gcc_version >= 4.0
    #  elif __GNUC_PREREQ(3,2)
    //       If gcc_version >= 3.2
    #  else
    //       Else
    #  endif
    #else
    //    If not gcc
    #endif
    
        3
  •  22
  •   Thierry Roy    11 年前

    作为旁注:

    要查找所有预定义的宏,请执行以下操作:

    • 创建空文件t.cpp
    • g++ -E -dM t.cpp