如何在Autoconf中使用c++ 11特性

How to use C++11 features with Autoconf?

本文关键字:c++ 特性 Autoconf      更新时间:2023-10-16

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

您检查过ax_cxx_compile_stdcxx_11了吗?

我想这正是你想要的。

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

您可以通过AX_CHECK_COMPILE_FLAG这样做,例如:

AX_CHECK_COMPILE_FLAG([-std=c++0x], [
                        CXXFLAGS="$CXXFLAGS -std=c++0x"])

(这里需要注意的是,AC_LANG是c++,而不是C,因为有可能在C中使用gcc,在c++中使用其他东西,反之亦然)

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

<>之前CXXFLAGS = " $ CXXFLAGS化= c++ 0 x"之前

配置。AC_PROG_CXX前的ac。如果编译器不接受-std=c++0x,那么configure将失败,提示" c++ compiler cannot create executables"。这不是最好的错误消息,但它确保如果配置成功,构建将成功。为了获得更好的错误消息,您可以检查编译器是否接受AC_PROG_CXX后面的标志。在任何一种情况下,如果编译器不提供必要的特性,但您的软件需要它,您都希望配置失败。

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

要启用编译器开关(当然,除非用户覆盖它),请将此置于Makefile.am:

AM_CXXFLAGS=-std=c++0x

我不认为有一个检查可用的c++ 11功能的存在,但你应该能够相当容易地编写一个测试程序与你想要使用的功能,如果这些功能不支持,将失败。然后,您可以按照Autoconf手册的这一节所描述的方式编写测试。