autotools:启用编译器警告

发布于 2024-09-16 22:25:15 字数 216 浏览 9 评论 0原文

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

TEST_AND_USE(-Wall -Wextra <other flags>)

谢谢

for an autotools-based C project, I'd like to get some more warnings from the compiler (e.g. at least -Wall in CFLAGS). What is the prefered way to enable compiler flags without breaking anything? Is there a m4 macro that tests if a given compiler flag is understood by the compiler?
With such a macro I could do

TEST_AND_USE(-Wall -Wextra <other flags>)

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

遮了一弯 2024-09-23 22:25:15

您可以只使用 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_TRY_COMPILE 现已弃用,您应该使用 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")

You can just use 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 addition: AC_TRY_COMPILE is now deprecated, instead you should use 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")
作业与我同在 2024-09-23 22:25:15

根本不用费心去更改configure.ac。只需使用您关心的 CFLAGS 调用 ./configure 即可:

./configure CFLAGS='-Wall -Wextra -O2 -g'

Don't bother changing the configure.ac at all. Just call ./configure with the CFLAGS you care about:

./configure CFLAGS='-Wall -Wextra -O2 -g'
梦毁影碎の 2024-09-23 22:25:15

广泛使用的是 attributes.m4 xine 项目中的 CC_CHECK_CFLAG_APPEND 宏。尽管如此,您经常会发现直接在configure.ac中编写的变体(因为它非常简单)

Widely used is the attributes.m4 CC_CHECK_CFLAG_APPEND macro from the xine project. Although, you often find variants (since it's quite simple) written directly in configure.ac

你穿错了嫁妆 2024-09-23 22:25:15

我这样做:

# 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

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

I do this:

# 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

it is a low-tech solution, but you do not have to accommodate all compilers

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文