include_guard¶
在 3.10 版本加入.
为 CMake 当前正在处理的文件提供一个包含保护。
include_guard([DIRECTORY|GLOBAL])
为当前的 CMake 文件设置一个包含保护(参见 CMAKE_CURRENT_LIST_FILE 变量文档)。
如果当前文件已经针对适用范围进行了处理(见下文),CMake 将在 include_guard 命令的位置结束对当前文件的处理。这提供了类似于源头文件中常用的包含防护或“#pragma once”指令的功能。如果当前文件之前已经针对适用范围进行了处理,则效果就像调用了 return() 一样。不要从当前文件中定义的函数内部调用此命令。
可以提供指定守卫范围的可选参数。该选项的可能值为:
目录include guard 适用于当前目录及以下目录。该文件只会在此目录范围内包含一次,但可能会被此目录外的其他文件再次包含(即父目录或另一个未被
add_subdirectory()或include()从当前文件或其子文件)。全球include guard 全局适用于整个构建。无论范围如何,当前文件只会被包含一次。
如果没有给出参数,include_guard 具有与变量相同的作用域,这意味着如果不存在内部函数作用域,则包含保护作用被最近的函数作用域或当前目录隔离。在这种情况下,命令行为与以下相同:
if(__CURRENT_FILE_VAR__)
return()
endif()
set(__CURRENT_FILE_VAR__ TRUE)