summaryrefslogtreecommitdiff
path: root/share/cmake-3.22/Help/command/include_guard.rst
diff options
context:
space:
mode:
Diffstat (limited to 'share/cmake-3.22/Help/command/include_guard.rst')
-rw-r--r--share/cmake-3.22/Help/command/include_guard.rst48
1 files changed, 48 insertions, 0 deletions
diff --git a/share/cmake-3.22/Help/command/include_guard.rst b/share/cmake-3.22/Help/command/include_guard.rst
new file mode 100644
index 0000000..dca3b6f
--- /dev/null
+++ b/share/cmake-3.22/Help/command/include_guard.rst
@@ -0,0 +1,48 @@
+include_guard
+-------------
+
+.. versionadded:: 3.10
+
+Provides an include guard for the file currently being processed by CMake.
+
+.. code-block:: cmake
+
+ include_guard([DIRECTORY|GLOBAL])
+
+Sets up an include guard for the current CMake file (see the
+:variable:`CMAKE_CURRENT_LIST_FILE` variable documentation).
+
+CMake will end its processing of the current file at the location of the
+:command:`include_guard` command if the current file has already been
+processed for the applicable scope (see below). This provides functionality
+similar to the include guards commonly used in source headers or to the
+``#pragma once`` directive. If the current file has been processed previously
+for the applicable scope, the effect is as though :command:`return` had been
+called. Do not call this command from inside a function being defined within
+the current file.
+
+An optional argument specifying the scope of the guard may be provided.
+Possible values for the option are:
+
+``DIRECTORY``
+ The include guard applies within the current directory and below. The file
+ will only be included once within this directory scope, but may be included
+ again by other files outside of this directory (i.e. a parent directory or
+ another directory not pulled in by :command:`add_subdirectory` or
+ :command:`include` from the current file or its children).
+
+``GLOBAL``
+ The include guard applies globally to the whole build. The current file
+ will only be included once regardless of the scope.
+
+If no arguments given, ``include_guard`` has the same scope as a variable,
+meaning that the include guard effect is isolated by the most recent
+function scope or current directory if no inner function scopes exist.
+In this case the command behavior is the same as:
+
+.. code-block:: cmake
+
+ if(__CURRENT_FILE_VAR__)
+ return()
+ endif()
+ set(__CURRENT_FILE_VAR__ TRUE)