如何在Autoconf中使用c++ 11特性
How to use C++11 features with Autoconf?
我有一个通过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手册的这一节所描述的方式编写测试。
- 当工件是库并且标志影响C或C++头时,特性标志/切换
- C++:编译对无关派生类、bug或特性的函数调用
- 设置窗口几何图形特性的正确方法
- 对于非常大的输入,缺少和重复 1..n 的数字数组.使用1..n系列特性的解决方案.溢出问题
- Movesense设备中的真实自定义Gatt服务和特性
- 如何:非根QML前端和根特性的工作人员线程
- 无向DFS:如何提供颜色图作为外部特性
- 我如何让GDB告诉我记忆特性一个给定的地址
- c++11新特性,正确使用shared_ptr
- 运行时特性测试、setjmp、longjmp和信号掩码
- Qt 和 Android 特性更改不发出
- wxWidgets 3.0-新特性和功能,添加和替换不推荐使用的特性和功能
- g++(4.7.2)错误或特性,在编译时初始化静态数组时
- 获取表面浅色特性
- 除了移动语义,还有哪些C++11特性可以提高代码的性能
- 请解释一个特性单例(C++)
- 统一容器特性
- 使用BOOST复制边及其顶点和特性
- Python 在 C/C++ 中的 yield 特性?
- 折叠表达式是C++14还是C++1z特性