【问题标题】:How to set default CPPFLAGS on autotools project如何在 autotools 项目上设置默认 CPPFLAGS
【发布时间】:2012-01-17 19:46:16
【问题描述】:

我需要将“-Wall -Werror”设置为项目中所有源文件的 CPPFLAGS。有没有办法在 autotools 中做到这一点?

我在 configure.ac 中尝试过以下操作:

AC_SUBST([AM_CPPFLAGS], [-Wall -Wextra])

它似乎不起作用。

编辑: 我在这里找到了一个名为 AX_CXXFLAGS_WARN_ALL 的 m4 宏:http://www.gnu.org/software/autoconf-archive/ax_cflags_warn_all.html 但是当我尝试使用它时出现以下错误:

configure.ac:10: /usr/bin/m4: ERROR: recursion limit of 1024 exceeded, use -L<N> to change it
autom4te: /usr/bin/m4 failed with exit status: 1
aclocal: autom4te failed with exit status: 1
autoreconf: aclocal failed with exit status: 1

我的configure.ac如下:

AC_INIT([foo], [1.0], [bar@baz.com])
m4_include([m4/ax_cflags_warn_all.m4])
m4_include([m4/ax_append_flag.m4])
m4_include([m4/ax_lib_oracle_oci.m4])
m4_include([m4/ax_check_openssl.m4])
AM_INIT_AUTOMAKE([foreign subdir-objects])
AM_PROG_CC_C_O
AC_PROG_CXX
AC_PROG_LIBTOOL
AX_CFLAGS_WARN_ALL
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile])
AX_LIB_ORACLE_OCI([11.0])
AX_CHECK_OPENSSL
AC_SUBST([AM_CXXFLAGS], [-fpic])
AC_OUTPUT

【问题讨论】:

  • 您真的需要设置-Wall -Werror 才能使您的项目正常工作吗?或者你只是想把它作为你的个人默认值?在后一种情况下,在您的个人构建中将其传递给configure,并将其排除在Makefile.am 之外,这样可以帮助您的分布式源的分发者和其他接收者。

标签: autotools automake


【解决方案1】:

> env CXXFLAGS="$CXXFLAGS -Wall -Werror" ./configure [选项]

我将它用于各种健全性检查 - 确保我不会逃避任何草率的假设。这应该也适用于 CPPFLAGSCFLAGS,前提是他们了解这些选项。我可能会添加严格的 "-ansi" 或其他一些标准,以及 "-pedantic" 以进行更多检查。

这样,当使用许可标志时,您可以不理会您的 configure.ac 和 Makefile.am 文件 - 知道它可以在严格的选项下正确构建。

【讨论】:

  • 我已经尝试了其他选项,但这是唯一一个似乎有效的选项。
【解决方案2】:

在 Makefile.am 中:

AM_CPPFLAGS = -Wall -Wextra

您也可以添加替代品,例如

#Makefile.am
AM_CPPFLAGS = ${my_CPPFLAGS}

#configure.ac
my_CPPFLAGS="-Wall -Wextra"
AC_SUBST([my_CPPFLAGS])

请注意,并非所有 -W 标志都用于预处理器,而是用于编译器。只有预处理器标志应该进入*CPPFLAGS,而编译器标志应该进入*CFLAGS。 CFLAGS 的配方与 CPPFLAGS 相同。

【讨论】:

  • 另请注意,并非所有编译器都接受 -Wall 和 -Wextra。如果你在 configure.ac 中分配它们而不检查 CC 是否识别它们,你会破坏构建。
【解决方案3】:

在 Makefile.am 中:

AM_CFLAGS = -Wall -Wextra

【讨论】:

    【解决方案4】:

    在我的情况下,出现以下错误:“configure.in 超出 1024 的递归限制,请使用 -L”

    包编译是从 makefile 中订购的。 所以“-L”选项将作为编译选项赋予“make”。

    使用以下 diff ,错误已解决。

    "-" cd $(SNMP_ROOT)/ucd-snmp-4.2 $(SEP) make "CC=$(CPP)" 安装

    "+" cd $(SNMP_ROOT)/ucd-snmp-4.2 $(SEP) make "CC=$(CPP)" -L install

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      相关资源
      最近更新 更多