TestForSTDNamespace

此模块检查 CXX 编译器是否支持 C++ 标准库的 std 命名空间。

在 CMake 项目中加载此模块,使用

include(TestForSTDNamespace)

早期版本的 C++(C++98 之前)没有要求为 C++ 标准模板库(STL)组件(例如 list 等)和 C++ 标准库的其他部分(例如 I/O 流 coutendl 等)设置专用命名空间,因此它们是全局可用的。

此模块定义了以下缓存变量

CMAKE_NO_STD_NAMESPACE

一个缓存变量,包含检查结果。如果支持 std 命名空间(C++ 98 及更新版本),则将其值设置为 0;如果不支持(ANSI C++),则将其值设置为 1

注意

std 命名空间在 C++ 98 标准中正式引入,使得此问题已过时。

示例

包含此模块将检查 std 命名空间支持,并定义 CMAKE_NO_STD_NAMESPACE 缓存变量

CMakeLists.txt
include(TestForSTDNamespace)
file(
  CONFIGURE
  OUTPUT config.h
  CONTENT "#cmakedefine CMAKE_NO_STD_NAMESPACE"
)

然后可以在 C++ 程序中使用它来定义缺失的命名空间

example.cxx
#include "config.h"

#ifdef CMAKE_NO_STD_NAMESPACE
#  define std
#endif

另请参阅