include_guard

在 3.10 版本中添加。

为 CMake 正在处理的文件提供一个包含保护。

include_guard([DIRECTORY|GLOBAL])

为当前 CMake 文件设置一个包含保护(参见 CMAKE_CURRENT_LIST_FILE 变量文档)。

如果当前文件已针对适用范围(见下文)处理过,CMake 将在 include_guard 命令所在位置结束对当前文件的处理。这提供了类似于源代码头文件中常用的包含保护或 #pragma once 指令的功能。如果当前文件之前已针对适用范围处理过,其效果就如同调用了 return()。不要在当前文件中定义的功能内部调用此命令。

可以提供一个指定保护范围的可选参数。选项的可能值为

DIRECTORY

包含保护应用于当前目录及其子目录。文件将仅在此目录范围内包含一次,但可能被此目录外部的其他文件再次包含(即父目录或其他目录未被 add_subdirectory()include() 从当前文件或其子目录中引入)。

GLOBAL

包含保护在全局范围内应用于整个编译。无论范围如何,都将仅包含当前文件一次。

如果没有给予参数,include_guard 的范围与变量相同,这意味着包含保护的效果被最近的功能范围或当前目录(如果不存在内部功能范围)隔离。在这种情况下,命令行为与

if(__CURRENT_FILE_VAR__)
  return()
endif()
set(__CURRENT_FILE_VAR__ TRUE)