如何在configure.ac中使用宏__GNUC__和__GNUC_MINOR__

时间:2014-07-04 08:13:46

标签: c gcc macros autoconf

我需要在configure.ac中测试gcc的版本,然后我这样做:

#if defined(__GNUC__) && (__GNUC__ > 3) 
    CFLAGS = xxxx  
#else 
    CFLAGS = xxxx
#endif   

但是失败了,if表达式中的CFLAGS从未使用过,而现在使用的gcc是4.1.2。
然后我写了一个简单的c程序来打印__GNUC__ __GNUC_MINOR__,它运作得很好 我错过了什么?如何在configure.ac中使用这两个宏?

2 个答案:

答案 0 :(得分:1)

那不是autoconf的工作方式。 autoconf.ac不是由C预处理器处理的C文件。 Autoconf宏是完全不同的东西。你应该寻找一个教程。如果我没记错的话,this is a decent one。 (有人肯定会评论,如果它不是:)

要检查编译器是否支持特定标志,您应该使用the Autoconf Archive中的AX_CHECK_COMPILE_FLAG宏。

答案 1 :(得分:0)

CFLAGSreserved作为autotools的环境变量。 ./configure --help列出了其他一些内容。理想情况下,用户应提供适当的编译器标志,例如

CC="gcc -std=c99" CFLAGS="-pipe -Wall -pedantic -O2" ./configure

如果不同的编译器存在问题,那么在程序包中包含README文件是完全合理的。我所知道的最好的现代教程是Autotools Mythbuster

现在,如果你想继续这个作为临时解决方案,可能来修改CFLAGS ......

AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
  [[#if defined (__GNUC__) && (__GNUC__ > 3)
    #error "GCC4" /* not an actual error - just using the fail condition. */
    #endif]])],
  [CFLAGS=<your non-GCC4 flags here>], [CFLAGS=<your GCC4 flags here>])

如果CFLAGS添加选项,可以使用automake的CFLAGS主要内容完成 - 但这本身就是另一个答案。