检测是否在 NVCC 中启用了 c++11
Detect if c++11 is enabled in NVCC
我想检测 .cu 文件是否在启用 C++11 支持的情况下编译。目前我有以下内容:
#if CUDART_VERSION < 7050
#define C11SUPPORTED 0
#else
#define C11SUPPORTED 1
#endif
但是这不起作用,因为即使支持 C++11,它也不会启用,除非通过 -std=c++11
开关。传递 -std=c++11
时是否可能还定义了其他内容?
更新
nvcc --compiler-options -dM -E -x cu - < /dev/null | grep "__cplus"
returns
#define __cplusplus 201402L
我使用的是NVCC V9.1.85版本。检查 __cplusplus
是否有效,即使对于较旧的 NVCC 版本?
如果 nvcc
符合标准,您应该可以像这样检查 __cplusplus
的值
#if __cplusplus >= 201103
#define C11SUPPORTED 1
#else
#define C11SUPPORTED 0
#endif
检查 __cplusplus
的值应该适用于 任何 C++ 编译器,至少从 C++98 开始。
我想检测 .cu 文件是否在启用 C++11 支持的情况下编译。目前我有以下内容:
#if CUDART_VERSION < 7050
#define C11SUPPORTED 0
#else
#define C11SUPPORTED 1
#endif
但是这不起作用,因为即使支持 C++11,它也不会启用,除非通过 -std=c++11
开关。传递 -std=c++11
时是否可能还定义了其他内容?
更新
nvcc --compiler-options -dM -E -x cu - < /dev/null | grep "__cplus"
returns
#define __cplusplus 201402L
我使用的是NVCC V9.1.85版本。检查 __cplusplus
是否有效,即使对于较旧的 NVCC 版本?
如果 nvcc
符合标准,您应该可以像这样检查 __cplusplus
的值
#if __cplusplus >= 201103
#define C11SUPPORTED 1
#else
#define C11SUPPORTED 0
#endif
检查 __cplusplus
的值应该适用于 任何 C++ 编译器,至少从 C++98 开始。