我有一个通过Autoconf配置的项目,我想在这个项目中开始使用C++ 11的功能。如何使“-std = gnu ++ 0x”开关始终处于启用状态并支持配置时检查的功能?如何在Autoconf中使用C++ 11功能?
回答
你可以像AX_CHECK_COMPILE_FLAG
做到这一点,如:
AX_CHECK_COMPILE_FLAG([-std=c++0x], [
CXXFLAGS="$CXXFLAGS -std=c++0x"])
(你必须要小心这里AC_LANG
是C++,在点不是C这就是所谓的,因为它是可以使用GCC对C和其他的C++或反之亦然)。
这可能是不够的:如果编译器不支持-std == C++ 0x,那么配置会成功,但构建将失败。 –
+1,因为很容易添加AC_MSG_ERROR的第三个参数 –
@WilliamPursell - 更有用的事情可能是使用AC_DEFINE与此结合使用,以便构建仍然可以继续进行,只需使用不同的部分实现与我今天在C中处理'snprintf'丢失的方式完全一样。这可能不是通过替代界面暴露或暴露的功能,但它可能不是现在的显示屏。 – Flexo
为了让编译器开关(除非,当然,用户覆盖它),把这个在您的Makefile.am
:
AM_CXXFLAGS=-std=c++0x
我不认为有一个为C的存在可用支票++ 11功能,但您应该能够使用要使用的功能轻松编写测试程序,如果这些功能不受支持,则该功能将失败。然后在this section of the Autoconf manual.
如果在没有C++ 11功能的情况下测试失败,则标志将需要位于CXXFLAGS中,否则配置将始终失败。 –
描述,你可以写一个测试,我认为这样做最简单的方法是添加:
CXXFLAGS="$CXXFLAGS -std=c++0x"
在AC_PROG_CXX前configure.ac。如果编译器不接受-std = C++ 0x,则配置将失败,并且“C++编译器无法创建可执行文件”。它不是最好的错误消息,但它确保如果配置成功,构建将成功。要获得更好的错误消息,可以检查编译器是否接受AC_PROG_CXX之后的标志。无论哪种情况,如果编译器不提供必要的功能,但软件需要它,则希望配置失败。
请注意,在用户在运行configure时未设置该变量的情况下,在AC_PROG_CXX之前设置CXXFLAGS会产生妨碍CXXFLAGS默认设置的不良副作用。出于这个原因,通常不建议在configury中设置CXXFLAGS,所以最好在AC_PROG_CXX之后检查标志(例如使用awoodland的解决方案) - 只要确保在AX_CHECK_COMPILE_FLAG的第三个参数中添加了AC_MSG_ERROR,以便如果功能不可用,配置将失败。
这很可能是正确的解决方案。人们只需记住在Debian中安装压缩包'autoconf-archive',然后在运行'autoconf'(将所需的宏拉入'aclocal.m4')之前运行'aclocal'。 – carandraug
这是比我的更好的解决方案,当我最初回答这个问题时并不存在。 – Flexo
@carandraug如果您或OP能够阐明更多细节,我将不胜感激。什么是正确的安装和使用语法?在安装autoconf-archive之前,我总是会在configure.ac中调用一个语法错误(不是“找不到”)错误。安装autoconf-archive后,我得到“语法错误:接近意外的标记'ac_config_headers =”$ ac_config_headers config.h“' – garyp
- 1. 用于C++的autoconf AC_CHECK_HEADERS 11
- 2. C++ 11功能与MinGW
- 3. C++ 11功能检查
- 4. 如何使用C++ 11个原子能
- 5. 如何在功能中使用功能
- 6. 如何使c + + 11自动更智能?
- 7. 如何在FlexeLint中启用C++ 11
- 8. 如何在CLion中启用C++ 11?
- 9. 如何实现decltype功能 - 预C++ 11,编译时间
- 10. 如何使用autoconf指定#define的值?
- 11. 如何使用Autoconf检查Linux版本?
- 12. 定时器功能不能在IE 11使用工作顶点
- 13. 如何告诉autoconf有关断开的交叉HOST功能?
- 14. 如何在功能参数在C++中
- 15. 如何使用autoconf与C++ 0x特性的
- 16. DirectX 11功能级别
- 17. 在C#中使用功能的做法
- 18. 我如何在autoconf的
- 19. 如何在OrientJS中使用LiveQuery功能?
- 20. 如何在HQL中使用mod功能
- 21. 如何在QBASIC中使用BOF功能?
- 22. 如何在gnuplot中使用floor功能
- 23. 如何在功能中使用地图
- 24. 如何在Java中使用multimap功能?
- 25. 如何在ASP.Net中使用ES6功能
- 26. 使用autoconf检查C#define的值
- 27. C++ 11不能使用Macports gcc47
- 28. 目标c - 如何在Mac OSX中使用恢复功能lion
- 29. 如何在Visual Studio中使用webView功能(C#)
- 30. 如何在C#交互式中使用反向搜索功能
除非你想使用GCC扩展大的宏库,你要使用的开关是“-std =的C++ 0x”。 –
这已经用Autoconf宏在这里解决了http://stackoverflow.com/questions/8585110/how-can-i-specify-that-i-want-c0x-in-makefile-am。它的优点是,如果你没有C++ 11编译器支持,它不会失败,而AC_CHECK_COMPILE_FLAG会在失败时停止构建。 – 2013-01-03 09:00:49
如果之前已经询问过,这怎么可能是重复的? – lvella