autoconf 和 automake vs -O2 vs -O3

Posted

技术标签:

【中文标题】autoconf 和 automake vs -O2 vs -O3【英文标题】:autoconf & automake versus -O2 versus -O3 【发布时间】:2011-06-10 20:10:11 【问题描述】:

我的 configure.ac 包含

AC_PROG_CXX

我的 Makefile.am 包含

AM_CXXFLAGS= -Werror -O3

生成的“配置”脚本除了 O3 之外,还会继续添加 -O2。

我怀疑我应该在 configure.ac 中做一些事情来声明我对 O3 的偏好,但我在文档中找不到它。如何告诉它我要控制优化级别?

【问题讨论】:

【参考方案1】:

不,您不应该向 configure.ac 添加任何内容来表明对 -O3 的偏好。这种东西属于用户的 CONFIG_SITE,而不是 configure.ac

但是,如果你坚持打破惯例,你可以这样做:

: $CXXFLAGS=-Werror -O3

请注意,此行必须出现在 AC_PROG_CXX 之前(或任何需要 AC_REQUIRES 的宏,例如 LT_INIT,因为这将导致 AC_PROG_CXX 在此行之前发送到配置脚本中。)

【讨论】:

我不明白。我有一个经过精心编写的程序,可以安全地进行最大优化并从中受益。没有办法表达吗? 如果未指定首选项,用户希望使用 -g -O2。修改 CXXFLAGS 是用户的特权,而不是包维护者的特权。 AM_CXXFLAGS可以加-Werror,但优化级别必须留给用户选择。 请注意最后的评论。如果您在配置期间检查 CXX 接受该选项,您应该只将 -Werror 添加到 AM_CXXFLAGS。并非所有编译器都这样做,当编译器不接受该选项时,用户会非常恼火。 叹息。我只想更改默认设置,让用户在不同意时询问他们想要什么。 上面的sn-p应该能做到这一点,应该没问题,但是有些用户会大声抱怨,这不是最佳实践。您始终可以在包控制文件(debian/rules 或 *.spec)中指定标志【参考方案2】:

前面的答案是正确的,应该由安装程序选择使用什么标志。如果您仍然想知道 -g -O2 来自哪里(可能),请参阅http://www.gnu.org/s/hello/manual/autoconf/C_002b_002b-Compiler.html

该页面确实建议“如果您的包不喜欢这个默认值,那么可以在 AC_INIT 之后和 AC_PROG_CXX 之前插入行 ': $CXXFLAGS=""' 来选择一个空的默认值。”

【讨论】:

以上是关于autoconf 和 automake vs -O2 vs -O3的主要内容,如果未能解决你的问题,请参考以下文章

包括使用 automake 和 autoconf 的动态库

安装 Autoconf, Automake & Libtool

如何在 autoconf/automake 中使用协议缓冲区?

如何通过 autoconf/automake 排除 boost 库/头文件包含问题?

如何正确更新 m4、autoconf、automake 和 libtool? Mac OSX

C++学习(三四四)./configuremakemake install,autoconf automake