include_guard

3.10 版本新增。

为当前由 CMake 处理的文件提供一个 include guard。

include_guard([DIRECTORY|GLOBAL])

为当前 CMake 文件设置一个 include guard(参见 CMAKE_CURRENT_LIST_FILE 变量文档)。

如果当前文件已经在适用的范围内被处理过(见下文),CMake 将在 `include_guard` 命令的位置结束对当前文件的处理。这提供了与源代码头文件中常用的 include guard 或 `#pragma once` 指令类似的功能。如果当前文件之前已经在适用的范围内被处理过,其效果如同调用了 return()。请勿在当前文件中定义的函数内部调用此命令。

可以提供一个可选参数来指定 guard 的范围。该选项的可能值为

DIRECTORY

include guard 适用于当前目录及其子目录。该文件在此目录范围内只会被包含一次,但可能会被当前文件或其子文件通过 add_subdirectory()include() 引入的当前文件或其子文件以外的其他文件(例如父目录或其他非子目录)再次包含。

GLOBAL

include guard 适用于全局范围,影响整个构建。无论在哪个范围内,该文件都只会被包含一次。

如果没有给出参数,`include_guard` 的范围与变量相同,意味着 include guard 的效果由最近的函数范围或当前目录(如果没有内部函数范围)隔离。在这种情况下,命令的行为与

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