我是否适合在我的构建系统中使用 shell 脚本而不是 AX_CHECK_COMPILE_FLAG?

Am I right for using a shell script instead of AX_CHECK_COMPILE_FLAG in my build system?

我目前正在做一个简单的虚拟机项目,并且一直在使用 Autotools 接触尽可能多的系统!

最初,我使用 AX_CHECK_COMPILE_FLAG 启用 -Wall -Wextra -pedantic -g3,但我担心这会阻止用户通过 $CXXFLAGS 变量设置自己的标志。因此,我从我的项目中删除了 AX_CHECK_COMPILE_FLAG 并使用了一个简单的 shell 脚本,我可以使用如下脚本:

#!/bin/bash
./configure CXXFLAGS="$CXXFLAGS -Wall -Wextra -pedantic -g3" && make && make check

我的想法是在开发期间使用这个简单的 shell 脚本,但通过我的 .gitattributes 文件将其排除,并通过我的 INSTALL.md 文件告诉用户他们可用的选项。但是,我这样做是对的还是我应该回去使用 AX_CHECK_COMPILE_FLAG?

AX_CHECK_COMPILE_FLAGS 只是检查所选的编译器是否支持指定的标志。它本身不会导致在任何特定的编译器或链接器调用中使用有问题的标志,也不会对为用户指定的任何标志变量进行任何持久修改,例如 CXXFLAGS.

但是,您可以包含 您自己的 代码,根据 AX_CHECK_COMPILE_FLAGS 测试的结果修改 CXXFLAGS,并这样做形状不佳且易碎。 CXXFLAGS 是一个 user 变量。如果您希望 configure 设置编译器标志,则将它们放在不同的输出变量中,也许是为该特定目的指定的。除了通过 CXXFLAGS 指定的那些之外,还使用这些额外的标志,并确保 CXXFLAGS 稍后出现在命令行中,以便用户可以因此覆盖 configure 的选择。如果您将 Automake 与 Autoconf 一起使用,那么它可以促进这一点。

综上所述,我倾向于认为您的警告和调试标志的特定示例不是我要构建到 configure 中的示例。我特别不会让用户默认使用 -Wextra。我有时会把这样的东西放进去,并用 --enable 选项来保护它们,但是你的个人目的包装脚本策略对我来说似乎也是合理的。