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)