我有一个通过Autoconf配置的项目,我想在这个项目中开始使用C ++ 11功能。如何始终启用“-std = gnu ++ 0x”开关并支持配置时检查的功能?
答案 0 :(得分:19)
答案 1 :(得分:15)
您可以使用AX_CHECK_COMPILE_FLAG
之类的内容执行此操作,例如:
AX_CHECK_COMPILE_FLAG([-std=c++0x], [
CXXFLAGS="$CXXFLAGS -std=c++0x"])
(这里需要注意的是AC_LANG
是C ++,而不是C,因为它可以使用gcc作为C而C ++使用其他内容,反之亦然。)
答案 2 :(得分:4)
我认为最简单的方法是添加:
CXXFLAGS="$CXXFLAGS -std=c++0x"在AC_PROG_CXX之前的configure.ac中
。如果编译器不接受-std = c ++ 0x,则configure将失败并显示“C ++编译器无法创建可执行文件”。它不是最好的错误消息,但它确保如果配置成功,构建将成功。要获得更好的错误消息,可以检查编译器是否在AC_PROG_CXX之后接受该标志。在任何一种情况下,如果编译器没有提供必要的功能但您的软件需要它,那么您希望configure失败。
请注意,在运行configure时,如果用户未设置该变量,则在AC_PROG_CXX之前设置CXXFLAGS会产生阻止CXXFLAGS默认设置的不良副作用。因此,通常不建议在配置中设置CXXFLAGS,因此最好在AC_PROG_CXX之后检查标志(例如使用awoodland的解决方案) - 只需确保在AX_CHECK_COMPILE_FLAG的第三个参数中添加AC_MSG_ERROR,以便如果功能不可用,则配置失败。
答案 3 :(得分:1)
要启用编译器切换(当然,除非用户覆盖它),请将其放在Makefile.am
:
AM_CXXFLAGS=-std=c++0x
我认为没有可用于检查C ++ 11功能的存在,但您应该能够使用您想要使用的功能轻松编写测试程序,如果这些功能不是支持的。然后,您可以按this section of the Autoconf manual.
中所述编写测试