c++ - 如何在 autoconf 中为 clang 检查支持编译标志
问题描述
我们可以在使用时检查对特定编译器标志的支持autoconf
:
AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
这些检查返回 true,但clang
不支持它们。
AX_CHECK_COMPILE_FLAG([-Woverride-init])
AX_CHECK_COMPILE_FLAG([-Wformat-truncation])
如何检查autoconf
for中的支持编译标志clang
?
我改变我的编译器
export CC=/usr/bin/clang-6.0
export CXX=/usr/bin/clang++-6.0
如果回显到脚本$CC
中$CXX
,则一切正常。
解决方案
如果您使用clang -Wsome-invalid-option -xc /dev/null
,您会看到 clang 发出有关未知选项的警告-Wsome-invalid-option
。AX_CHECK_COMPILE_FLAG
声明警告被忽略的文档。
您需要使用宏的参数 4 来包含-Werror
:
AX_CHECK_COMPILE_FLAG([-Woverride-init], , , [-Werror])
此检查还会生成一个缓存变量,以防您需要覆盖它:
ax_cv_cflags__Werror__Woverride_init
如果设置为yes
,则编译器支持该标志,否则不支持该标志。您也可以将其用于其他标志:
AX_CHECK_COMPILE_FLAG([-Wformat-truncation], , , [-Werror])
AS_VAR_IF([ax_cv_cflags__Werror__Wformat_truncation], [yes],
,
[AC_FATAL([-Wformat-truncation not supported])])
通用形式适用ax_cv_cflags_{EXTRA}_{FLAG}
于 C。显然,如果您要使用AS_VAR_IF
来检查缓存变量,那么您也可以使用第二个和/或第三个宏参数,AC_FATAL
如果需要编译标志,您可以使用:
AX_CHECK_COMPILE_FLAG([-Wformat-truncation],
,
[AC_FATAL([-Wformat-truncation is required])],
[-Werror])
推荐阅读
- extjs - 更改时未检查 RadioButton
- json - How do I programmatically find the path for an asset file I have in Angular?
- flutter - 如何在 Flutter 应用中创建堆叠图像的 GridView?
- linker-errors - ScalaJS:引用不存在的类 play.twirl.api.Html
- c - 关于返回 char* 和 memory 的问题
- haskell - 如何在 haskell 中创建菱形?油漆字符
- tensorflow - Tensorflow TPU 数据转换器工具示例中的 image_utils 来自哪里?
- oauth-2.0 - OAuth2 (Keycloak):client_credentials 授权类型附加声明
- string - 让 Bash 解析由转义字符 \ 连接的多个包含空格的单词
- firebase - 部署 Cloud Functions 时,云存储带宽迅速增加