关于 AC_PROG_CC_C11
的类比,目前没有 提及。
如何让我的 autotools 项目将 --std=c11
放入 CFLAGS
中?
最简单的方法是将
CFLAGS+=" -std=c11"
在你的configure.ac
文件中(除了AC_PROG_CC
),加入以下内容。 configure.ac
是一个shell脚本模板,所以你可以直接将shell代码放入其中。事实上,所有的AC_FOO_BAR
m4宏本身都会扩展成shell代码。
注意:这不会检查你的编译器是否实际支持-std=c11
标志。如果你想要检查,你可以使用AX_CHECK_COMPILE_FLAG
从autoconf存档中获取:
AX_CHECK_COMPILE_FLAG([-std=c11], [
CFLAGS+=" -std=c11"
], [
echo "C compiler cannot compile C11 code"
exit -1
])
虽然只是等待编译过程中出现错误也可以,但我想这种方式会更好。这样错误信息会更友好。
-std=c11
更改为--std=c11
。)错误是`./configure: line 12232: syntax error near unexpected token '-std=c11,' ./configure: line 12232: 'AX_CHECK_COMPILE_FLAG(-std=c11,'。我不知道方括号被吃掉了什么。 - fadedbeeautoreconf
的机器上,而不是应该编译软件包的所有地方)。大多数Linux发行版都有它的软件包,并且还有一个FreeBSD端口。不确定MacOS X和其他BSD是否有。 - Wintermuteax_check_compile_flag.m4
文件并将其转储到您的m4
з›®еЅ•дёгЂ‚е®ѓдјјд№ЋжІЎжњ‰д»»дЅ•дѕќиµ–е…ізі»гЂ‚ - Wintermute+=
是 Bash 的扩展,不是吗?当我在 Dash 中运行 foo+=bar
时,它会拒绝并报语法错误,但是当我在其中显式地运行一个包含此内容的配置脚本时,它却可以工作。这是怎么回事? - Dolda2000+=
来保证可移植性。相反,应该使用 CFLAGS="$CFLAGS -std=c11"
。 - Paul J. LucasAC_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
AC_PROG_CC
集成 C11 测试,相应地设置ac_cv_prog_cc_c11
和ac_prog_cc_stdc
。 - Brett Hale