【问题标题】:Running ./configure with -Wall leads to libraries not being found使用 -Wall 运行 ./configure 会导致找不到库
【发布时间】:2013-01-12 06:56:03
【问题描述】:

我想在 autotools 项目中使用 -Wall-Werror 作为 gcc 的标志,但我不想将它们放在我的 configure.ac 中。

因此,我尝试使用./configure CFLAGS='-Wall -Werror',却从我的AC_SEARCH_LIBS 宏调用之一中得到错误:

AC_SEARCH_LIBS([pow], [m], , AC_MSG_ERROR([Could not find standard math library.]))

使用添加的CFLAGS 运行配置时出现错误:

configure: error: Could not find standard math library.

我在这里做错了什么?没有设置 CFLAGS 变量,配置工作正常。

【问题讨论】:

  • 检查您的配置日志文件以获取来自它尝试运行该步骤的输出。您会看到错误是什么,并且可能可以修复它。
  • 日志文件告诉我:error: conflicting types for built-in function 'pow' [-Werror],在尝试编译 conftest.c 之后。从 CFLAGS 中删除 -Werror 可以解决这个问题,但这对我来说并没有什么用处。
  • 因此修复原型以匹配生成它的任何远足,然后重试。
  • @Carl 你不能那样做。这是一个已知的问题; autoconf 使用的测试通常会带有警告,并且通过 -Werror 将警告提升为错误将导致测试失败。处理此问题的合理方法(如果使用 automake)是有条件地将标志添加到 AM_CFLAGS(条件是配置时间检查 CC 接受标志)。

标签: c autotools automake


【解决方案1】:

如您所知,将编译警告提升为错误会使./configure 感到困惑。

你可以做的是在make时间传递自定义CFLAGS

$ ./configure
$ make CFLAGS='-O2 -g -Wall -Wextra -Werror'

另一个选项是 William Pursell 的方法:在 ./configure 中添加一个选项以打开 -Werror(如果支持):

(配置.ac)

AC_ARG_ENABLE([werror],
              [AS_HELP_STRING([--enable-werror], [Use -Werror @<:@no@:>@])],
              [:],
              [enable_werror=no])
AM_CONDITIONAL([ENABLE_WERROR], [test "$enable_werror" = yes])

(Makefile.am)

if ENABLE_WERROR
AM_CFLAGS += -Werror
endif

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 2021-03-21
    • 2020-04-30
    • 1970-01-01
    • 2023-03-26
    • 2016-09-21
    • 2014-06-04
    • 1970-01-01
    相关资源
    最近更新 更多