使 autotools 添加 --std=c11 到 CFLAGS

Make autotools add --std=c11 to CFLAGS

没有 mentionAC_PROG_CC_C11 类似于 AC_PROG_CC_C99

如何让我的 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 from the autoconf archive:

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

...虽然只是等待编译失败也可以,我想。不过,这样错误消息会更好。

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

(使用 shit Microchip xc16 PIC 编译器构建时)