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)