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)