Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用C++;11个具有自动功能的功能?_C++_C++11_Autoconf - Fatal编程技术网

C++ 如何使用C++;11个具有自动功能的功能?

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功能是否存

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

您可以通过以下方式完成此操作,例如:


(这里需要注意 AcLangLe/Cuffice是C++,而不是C,因为它可以使用GCC来代替C,其他的东西可以用于C++或反之亦然).< /P> < P>允许编译器切换(当然,用户不超过它),把它放进你的<代码> MaFe文件中。

AM_CXXFLAGS=-std=c++0x

我认为没有检查C++11功能是否存在的方法,但是您应该能够相当容易地使用您想要使用的功能编写测试程序,如果这些功能不受支持,那么测试程序将失败。然后您可以编写一个测试,如中所述。我认为最简单的方法是添加:

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

请注意,在AC_PROG_CXX之前设置CXXFLAGS会产生不良的副作用,即在用户在运行configure时未设置该变量的情况下,会阻止CXXFLAGS的默认设置。因此,通常不建议在配置中设置CXXFLAGS,因此最好在AC_PROG_CXX之后检查标志(例如使用awoodland的解决方案)--只需确保在AX\u CHECK\u COMPILE\u标志的第三个参数中添加一个AC\u MSG\u错误,以便在功能不可用时配置失败。

您检查了吗

我想这正是你想要的


上有一个大的宏库,除非您想使用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"