TestForANSIStreamHeaders

此模块检查 CXX 编译器是否支持没有 .h 扩展名的标准库头文件(例如 <iostream>)。

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

include(TestForANSIStreamHeaders)

C++ 的早期版本(C++98 之前)不支持包含没有扩展名的标准头文件。

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

CMAKE_NO_ANSI_STREAM_HEADERS

一个包含检查结果的缓存变量。如果标准头文件可以不带 .h 扩展名包含(C++ 98 及更高版本),则其值将设置为 0;如果需要 .hANSI C++),则设置为 1

注意

不带扩展名的 C++ 标准头文件在 C++ 98 标准中正式引入,使得此问题已过时。

示例

包含此模块将检查 C++ 标准头文件如何包含,并定义 CMAKE_NO_ANSI_STREAM_HEADERS 缓存变量

CMakeLists.txt
include(TestForANSIStreamHeaders)
file(
  CONFIGURE
  OUTPUT config.h
  CONTENT "#cmakedefine CMAKE_NO_ANSI_STREAM_HEADERS"
)

C++ 程序随后可以有条件地包含可用的头文件

example.cxx
#include "config.h"

#ifdef CMAKE_NO_ANSI_STREAM_HEADERS
#  include <iostream.h>
#else
#  include <iostream>
#endif

int main() { ... }

另请参阅