C++ 如何使用C++;11个具有自动功能的功能?
我有一个通过Autoconf配置的项目,我想在这个项目中开始使用C++11特性。如何始终启用“-std=gnu++0x”开关,并在配置时检查对功能的支持?您可以通过以下方式完成此操作,例如:C++ 如何使用C++;11个具有自动功能的功能?,c++,c++11,autoconf,C++,C++11,Autoconf,我有一个通过Autoconf配置的项目,我想在这个项目中开始使用C++11特性。如何始终启用“-std=gnu++0x”开关,并在配置时检查对功能的支持?您可以通过以下方式完成此操作,例如: (这里需要注意 AcLangLe/Cuffice是C++,而不是C,因为它可以使用GCC来代替C,其他的东西可以用于C++或反之亦然).< /P> < P>允许编译器切换(当然,用户不超过它),把它放进你的 MaFe文件中。 AM_CXXFLAGS=-std=c++0x 我认为没有检查C++11功能是否存
(这里需要注意AM_CXXFLAGS=-std=c++0x
我认为没有检查C++11功能是否存在的方法,但是您应该能够相当容易地使用您想要使用的功能编写测试程序,如果这些功能不受支持,那么测试程序将失败。然后您可以编写一个测试,如中所述。我认为最简单的方法是添加:
在上有一个大的宏库,除非您想使用GCC扩展,否则您想使用的开关是“-std=c++0x”。这已经通过这里的Autoconf宏解决了。它的优点是,如果没有C++ 11编译器支持,它不会失败,而ActhCuxiCopyILIG标志将在失败时停止构建。如果之前被问过,这怎么可能是一个副本?如果测试失败,没有C++ 11个特性,然后该标志将需要在CXXFLAGS中,否则配置将始终失败。这可能是不够的:如果编译器不支持-std==c++0x,则配置将成功,但生成将失败。+1,因为用AC_MSG添加第三个参数很容易_ERROR@WilliamPursell-更有用的方法可能是将AC_DEFINE与此结合使用,这样构建仍然可以继续,只需使用一些部分的不同实现,就像我今天在C中处理缺少的
snprintf
一样。这可能是较少的功能暴露或通过一个替代接口暴露,但在这一点上它可能不是一个展示的障碍。非常好的建议,特别是因为OP刚刚开始使用功能。这当然是有条件地使用功能的正确时机!这很可能是正确的解决方案。人们必须记住在Debian中安装归档包autoconf-archive
,并在运行autoconf
之前运行aclocal
(将所需的宏拉入aclocal.m4
),这是一个比我的更好的解决方案,这在我最初回答这个问题时是不存在的。@carandraug如果您或OP能详细解释一下,我将不胜感激。正确的安装和语法是什么?在安装autoconf archive之前,我总是在configure.ac中调用时遇到语法错误(而不是“找不到”)错误。安装autoconf archive后,我得到“语法错误:接近意外标记`ac_config_headers=“$ac_config_headers config.h“@garyp我的建议是在project中创建一个m4
目录,并将该宏复制到其中。然后在调用autoconf
之前,调用aclocal-Im4
。许多其他项目都提供了自己的autoconf宏(例如pkg-config),希望您将它们复制到项目中。您应该只希望贡献者拥有autoconf本身及其附带的宏。@carandraugh谢谢您的好主意。未来的人是否需要执行一个本地的?或者重新配置会解决问题吗?顺便说一句,经过反复试验和搜索,我发现适合我的正确语法是AX_CXX_COMPILE_STDCXX_11([noext],[mandatory])。我很难弄明白这一点。
CXXFLAGS="$CXXFLAGS -std=c++0x"