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)