我需要在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中使用这两个宏?
答案 0 :(得分:1)
那不是autoconf的工作方式。 autoconf.ac
不是由C预处理器处理的C文件。 Autoconf宏是完全不同的东西。你应该寻找一个教程。如果我没记错的话,this is a decent one。 (有人肯定会评论,如果它不是:)
要检查编译器是否支持特定标志,您应该使用the Autoconf Archive中的AX_CHECK_COMPILE_FLAG
宏。
答案 1 :(得分:0)
CFLAGS
是reserved作为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
主要内容完成 - 但这本身就是另一个答案。