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)