TestForANSIStreamHeaders¶
此模块检查 CXX 编译器是否支持不带 .h 扩展的标准库头文件(例如 <iostream>)。
在 CMake 项目中加载此模块,使用
include(TestForANSIStreamHeaders)
早期版本的 C++(C++98 之前)不支持在不带扩展名的情况下包含标准头文件。
此模块定义了以下缓存变量
CMAKE_NO_ANSI_STREAM_HEADERS一个缓存变量,包含检查结果。如果标准头文件可以在不带
.h扩展名的情况下包含(C++ 98及更新版本),则设置为值0;如果需要.h(ANSI 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() { ... }