2012-01-17 33 views
3

我需要为项目中的所有源文件设置“-Wall -Werror”作为CPPFLAGS。有没有办法在autotools中做到这一点?如何在自动工具项目上设置默认CPPFLAGS

我试图在configure.ac如下:

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

这似乎并没有工作。

编辑: 我发现了一个m4宏称为AX_CXXFLAGS_WARN_ALL这里: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], [[email protected]]) 
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 
+2

你真的需要为你的项目设置'-Wall -Werror'吗?或者你只是想把它作为你的*个人*默认?在后一种情况下,它传递给'configure'在您的个人构建和离开它'Makefile.am',做分销商和分布式源青睐的其他接收器。 – thiton 2012-01-18 11:53:10

回答

2

> ENV CXXFLAGS = “$ CXXFLAGS -Wall -Werror” 的./configure [选项]

我用这个各种健全的检查 - 确保我没有与任何马虎假设越来越远。这应该与CPPFLAGSCFLAGS一起使用,只要他们了解选项。我可能会添加严格的“-ansi”或其他一些标准,以及“pedantic”以进行更多检查。

这种方式,您可以留下您configure.ac和Makefile.am单独文件时使用许可标志 - 知道它可以在严格的选择正确建立。

+0

我试过了其他的选择,但这是唯一的似乎工作。 – chotchki 2012-01-21 19:26:30

0

在Makefile.am:

AM_CFLAGS = -Wall -Wextra 
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相同。

+2

另请注意,并非所有编译器都接受-Wall和-Wextra。如果您在configure.ac中分配它们而不检查CC是否识别它们,则会破坏构建。 – 2012-01-18 16:58:41

相关问题