我不是 autoconf 的粉丝,但为了最不意外的原则,我试图让我的(非 autoconf)配置脚本的行为尽可能接近用户对基于 autoconf 的构建系统的期望。GNU 编码标准在这个主题上实际上是相当合理的,并明确提到不使用 autoconf/automake 而是以另一种方式提供兼容接口的可能性:
https://www.gnu.org/prep/standards/standards.html#Configuration
然而,我找不到任何好的描述的一个问题是如何最好地处理 CFLAGS。我很清楚,任何与用户无关的基本标志(如-I$(srcdir)/inc
)都不属于配置脚本或 makefile 中的 CFLAGS,因为覆盖它们会完全破坏构建。所以这些我要么在makefile中硬编码,要么(如果它们需要一些检测)将检测逻辑放在configure中,但是通过一个单独的make变量而不是CFLAGS传递它们,这样它们就不会被覆盖。
不过,我仍然不清楚如何最好地处理是可选的东西,比如优化级别/选项、警告标志、调试等。标志应该由诸如此类的东西启用,--enable-debug
或者--enable-warnings
添加到CFLAGS
或传递到其他一些 make 变量中吗?如果它们与 user-provided 中已经存在的标志冲突CFLAGS
怎么办?
我可以看到很多项目的答案可能应该是“根本不要弄乱它,让用户选择他们的CFLAGS
”,但我的一些用例是用户群通常有兴趣的项目开箱即用的优化和调试配置。
编辑:我忘记的另一个问题:在检测和自动使用某些非必需但首选的 CFLAGS 时,是否应该仅在用户CFLAGS
在环境中留空时才这样做,还是总是?