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