include_guard¶
在版本 3.10 中新增。
為 CMake 目前正在處理的檔案提供 include guard 機制。
include_guard([DIRECTORY|GLOBAL])
為目前的 CMake 檔案設定 include guard(請參閱 CMAKE_CURRENT_LIST_FILE
變數文件)。
如果目前的檔案已經針對適用的範圍處理過(見下方),CMake 將會在 include_guard
命令的位置結束對目前檔案的處理。這提供的功能類似於原始碼標頭中常用的 include guards,或是 #pragma once
指令。如果目前的檔案先前已針對適用的範圍處理過,效果就如同呼叫了 return()
。請勿從目前檔案中定義的函式內部呼叫此命令。
可以提供一個可選的引數來指定 guard 的範圍。選項的可能值為
DIRECTORY
include guard 適用於目前目錄及其下方目錄。檔案在目錄範圍內只會被包含一次,但可能會被此目錄之外的其他檔案再次包含(即父目錄或未透過
add_subdirectory()
或include()
從目前檔案或其子檔案引入的其他目錄)。GLOBAL
include guard 全域適用於整個建置。目前的檔案無論範圍為何,都只會被包含一次。
如果沒有給定引數,include_guard
的範圍與變數相同,表示 include guard 的效果會被最近的函式範圍或目前的目錄隔離(如果沒有內部的函式範圍存在)。在這種情況下,命令行為與
if(__CURRENT_FILE_VAR__)
return()
endif()
set(__CURRENT_FILE_VAR__ TRUE)