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() { ... }

另请参阅