代码之家  ›  专栏  ›  技术社区  ›  Uli Schlachter

自动工具:启用编译器警告

  •  5
  • Uli Schlachter  · 技术社区  · 14 年前

    对于一个基于自动工具的C项目,我想从编译器得到更多的警告(例如,至少在cflags中是-wall)。启用编译器标志而不破坏任何内容的首选方法是什么?是否有一个M4宏测试给定的编译器标志是否被编译器理解? 有了这样的宏,我可以做到

    TEST_AND_USE(-Wall -Wextra <other flags>)
    

    谢谢

    4 回复  |  直到 9 年前
        1
  •  4
  •   elmarco    14 年前

    广泛使用的是 attributes.m4 cc_check_cflag_append宏来自xine项目。不过,您经常会发现直接在configure.ac中编写的变体(因为它非常简单)。

        2
  •  9
  •   caf    9 年前

    你可以用 AC_TRY_COMPILE :

    AC_MSG_CHECKING(whether compiler understands -Wall)
    old_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -Wall"
    AC_TRY_COMPILE([],[],
      AC_MSG_RESULT(yes),
      AC_MSG_RESULT(no)
      CFLAGS="$old_CFLAGS")
    

    2015加法: 阿克里编译 现在已弃用,而应使用 AC_COMPILE_IFELSE :

    AC_MSG_CHECKING(whether compiler understands -Wall)
    old_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -Wall"
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
      AC_MSG_RESULT(yes),
      AC_MSG_RESULT(no)
      CFLAGS="$old_CFLAGS")
    
        3
  •  7
  •   Jack Kelly    14 年前

    不用费心换 configure.ac 完全。只要打电话 ./configure CFLAGS 你关心的是:

    ./configure CFLAGS='-Wall -Wextra -O2 -g'
    
        4
  •  2
  •   Anycorn    14 年前

    我这样做:

    # debug compilation
    AC_ARG_ENABLE(debug,
        AC_HELP_STRING(--enable-debug, [Debug compilation (Default = no)]),
        enable_debug=$enableval, enable_debug=no)
    
    if test "$enable_debug" = "yes" ; then
        CFLAGS="$CFLAGS  -g -O0 -Wall -Wno-uninitialized"
        CXXFLAGS="$CXXFLAGS -g -O0 -Wall -Wno-uninitialized"
    fi
    

    这是一个低技术的解决方案,但您不必容纳所有编译器