cmake:include、include_guard 小咪咪 2022-10-12 00:45 150阅读 0赞 # include # 从文件或模块加载并运行CMake代码。 include(<file|module> [OPTIONAL] [RESULT_VARIABLE <var>] [NO_POLICY_SCOPE]) * 从给定的文件中加载并运行CMake代码。 * 变量读写访问调用者的作用域(动态作用域)。 * 如果OPTIONAL存在,那么如果文件不存在,则不会引发错误。 * 如果给了RESULT\_VARIABLE变量,变量将被设置为完整的文件名,如果失败,将被设置为NOTFOUND。 * 如果指定的是模块而不是文件: * 则首先在CMAKE\_MODULE\_PATH路径中搜索名为< modulename >.cmake的文件,然后在cmake module目录中搜索。 * 这里有一个例外:如果调用include()的文件位于CMake内置模块目录中,那么首先搜索CMake内置模块目录,然后搜索CMAKE\_MODULE\_PATH。参见策略CMP0017。 * 有关NO\_POLICY\_SCOPE选项的讨论,请参阅cmake\_policy()命令文档 # include\_guard # 3.10新版功能。 为CMake当前正在处理的文件提供一个包含保护。 include_guard([DIRECTORY|GLOBAL]) 为当前CMake文件设置一个include保护(参见CMAKE\_CURRENT\_LIST\_FILE变量文档)。 如果当前文件已经在适用范围内被处理(见下文),则CMake将在include\_guard()命令所在的位置结束对当前文件的处理。它提供的功能类似于源代码头文件中常用的include保护或\#pragma once指令。如果当前文件之前已经在适用范围内处理过,其效果就好像已经调用了return()。不要从当前文件中定义的函数内部调用此命令。 可以提供一个可选参数来指定保护的范围。该选项的可能值为: * DIRECTORY: * 包含保护应用于当前目录及其下面。 * 该文件只会在此目录范围内被包含一次,但可能会被此目录之外的其他文件再次包含(即父目录或未被add\_subdirectory()或include()从当前文件或其子文件拉入的另一个目录)。 * GLOBAL:包含保护全局应用于整个构建。无论作用域如何,当前文件只被包含一次。 如果没有给出参数,include\_guard具有与变量相同的作用域,这意味着如果内部函数作用域不存在,则包含保护作用域由最近的函数作用域或当前目录隔离。在这种情况下,命令行为相同: if(__CURRENT_FILE_VAR__) return() endif() set(__CURRENT_FILE_VAR__ TRUE)
还没有评论,来说两句吧...