【问题标题】:how to use macro __GNUC__ and __GNUC_MINOR__ in configure.ac如何在 configure.ac 中使用宏 __GNUC__ 和 __GNUC_MINOR__
【发布时间】:2014-07-04 08:13:45
【问题描述】:

我需要在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 中使用这两个宏?

【问题讨论】:

标签: c gcc macros autoconf


【解决方案1】:

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

要检查编译器是否支持特定标志,您应该使用来自the Autoconf ArchiveAX_CHECK_COMPILE_FLAG 宏。

【讨论】:

    【解决方案2】:

    CFLAGSreserved 作为自动工具的环境变量。 ./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主要来完成——但这本身就是另一个答案。

    【讨论】:

    • 这实际上并不可靠——clang 和英特尔的编译器也定义了 GNUC,但它们不接受与 GCC 相同的命令行选项。
    • @pdw - 不,它不可靠。但是 clang 和 icc 与 gcc 共享足够多的标志和 C 语言扩展,它可能适用于更常见的开关。此外,这是 OP 要求的。
    猜你喜欢
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多