让Autotools在CFLAGS中添加--std=c11

5

关于 AC_PROG_CC_C11 的类比,目前没有 提及

如何让我的 autotools 项目将 --std=c11 放入 CFLAGS 中?


请注意:future Autoconf 发布版(仍然在 git 仓库中)将使用 AC_PROG_CC 集成 C11 测试,相应地设置 ac_cv_prog_cc_c11ac_prog_cc_stdc - Brett Hale
问题的标题和正文应该更正为“-std=c11”,而不是“--std=C11”吧?我猜作者关心的是GCC、Clang、Intel和其他编译器所接受的选项。 - Jeff Hammond
我已将C11探针提取到m4/c11.m4中,网址为https://github.com/rurban/safeclib/commit/e57c5e2df3073be8ecc682daa1e9f6856f72415b。 - rurban
2个回答

7

最简单的方法是将

CFLAGS+=" -std=c11"

在你的configure.ac文件中(除了AC_PROG_CC),加入以下内容。 configure.ac是一个shell脚本模板,所以你可以直接将shell代码放入其中。事实上,所有的AC_FOO_BAR m4宏本身都会扩展成shell代码。

注意:这不会检查你的编译器是否实际支持-std=c11标志。如果你想要检查,你可以使用AX_CHECK_COMPILE_FLAGautoconf存档中获取:

AX_CHECK_COMPILE_FLAG([-std=c11], [
  CFLAGS+=" -std=c11"
], [
  echo "C compiler cannot compile C11 code"
  exit -1
])

虽然只是等待编译过程中出现错误也可以,但我想这种方式会更好。这样错误信息会更友好。


AX_CHECK_COMPILE_FLAG不起作用。(我还尝试将-std=c11更改为--std=c11。)错误是`./configure: line 12232: syntax error near unexpected token '-std=c11,' ./configure: line 12232: 'AX_CHECK_COMPILE_FLAG(-std=c11,'。我不知道方括号被吃掉了什么。 - fadedbee
2
你需要安装autoconf存档才能使其工作(仅在运行autoreconf的机器上,而不是应该编译软件包的所有地方)。大多数Linux发行版都有它的软件包,并且还有一个FreeBSD端口。不确定MacOS X和其他BSD是否有。 - Wintermute
1
或者您可以从答案链接后面的tarball中选择ax_check_compile_flag.m4文件并将其转储到您的m4目录中。它似乎没有任何依赖关系。 - Wintermute
我不明白为什么这个能够工作。+= 是 Bash 的扩展,不是吗?当我在 Dash 中运行 foo+=bar 时,它会拒绝并报语法错误,但是当我在其中显式地运行一个包含此内容的配置脚本时,它却可以工作。这是怎么回事? - Dolda2000
你不应该使用 += 来保证可移植性。相反,应该使用 CFLAGS="$CFLAGS -std=c11" - Paul J. Lucas

2
AC_DEFUN([AX_CHECK_STDC],
[AX_CHECK_COMPILE_FLAG([-std=gnu11],
    [AX_APPEND_FLAG([-std=gnu11])],
    [AX_CHECK_COMPILE_FLAG([-std=c11],
        [AX_APPEND_FLAG([-std=c11])],
        [AX_CHECK_COMPILE_FLAG([-std=c99],
            [AX_APPEND_FLAG([-std=c99])],
            [AC_MSG_ERROR([C compiled does not support at least C99!])])
        ])
    ])
])

输出:

checking whether C compiler accepts -std=gnu11... no
checking whether C compiler accepts -std=c11... no
checking whether C compiler accepts -std=c99... yes

"最初的回答" (当使用糟糕的Microchip xc16 PIC编译器进行构建时)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接