如何在Autoconf中使用C++ 11功能?

lve*_*lla 13 c++ autoconf c++11

我有一个通过Autoconf配置的项目,我想在这个项目中开始使用C++ 11功能.如何始终启用"-std = gnu ++ 0x"开关并支持配置时检查的功能?

Geo*_*roy 19

你检查过 ax_cxx_compile_stdcxx_11 吗?

我认为这正是你想要的.

gnu网站上有一个大的宏库.

  • 这很可能是正确的解决方案.人们必须记住在Debian中安装归档包`autoconf-archive`,并在运行`autoconf`之前运行`aclocal`(将所需的宏拉入`aclocal.m4`). (4认同)

Fle*_*exo 16

你可以这样做AX_CHECK_COMPILE_FLAG,例如:

AX_CHECK_COMPILE_FLAG([-std=c++0x], [
                        CXXFLAGS="$CXXFLAGS -std=c++0x"])
Run Code Online (Sandbox Code Playgroud)

(这里需要注意的AC_LANG是C++,而不是C,因为它可以使用gcc作为C而C++使用其他内容,反之亦然).

  • 很好的建议,特别是因为 OP 才刚刚开始使用功能。这当然是有条件地使用功能的合适时机! (2认同)

Wil*_*ell 5

我认为最简单的方法是添加:

CXXFLAGS="$CXXFLAGS -std=c++0x"

在 AC_PROG_CXX 之前的 configure.ac 中。如果编译器不接受 -std=c++0x,则配置将失败并显示“C++ 编译器无法创建可执行文件”。这不是最好的错误消息,但它确保如果配置成功,构建将成功。为了获得更好的错误信息,您可以检查编译器是否接受 AC_PROG_CXX 之后的标志。在任何一种情况下,如果编译器不提供必要的功能但您的软件需要它,您希望配置失败。

请注意,如果用户在运行配置时未设置该变量,则在 AC_PROG_CXX 之前设置 CXXFLAGS 具有防止 CXXFLAGS 的默认设置的不良副作用。出于这个原因,通常不建议在配置中设置 CXXFLAGS,因此最好在 AC_PROG_CXX 之后检查标志(例如使用 awoodland 的解决方案)——只需确保在 AX_CHECK_COMPILE_FLAG 的第三个参数中添加一个 AC_MSG_ERROR 以便如果功能不可用,则配置失败。