.\" Man page generated from reStructuredText.
.
.TH "CMAKE-VARIABLES" "7" "May 31, 2017" "3.8.2" "CMake"
.SH NAME
cmake-variables \- CMake Variables Reference
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.SH VARIABLES THAT PROVIDE INFORMATION
.SS CMAKE_ARGC
.sp
Number of command line arguments passed to CMake in script mode.
.sp
When run in \-P script mode, CMake sets this variable to
the number of command line arguments.  See also \fBCMAKE_ARGV0\fP,
\fB1\fP, \fB2\fP ...
.SS CMAKE_ARGV0
.sp
Command line argument passed to CMake in script mode.
.sp
When run in \-P script mode, CMake sets this variable to
the first command line argument.  It then also sets \fBCMAKE_ARGV1\fP,
\fBCMAKE_ARGV2\fP, ... and so on, up to the number of command line arguments
given.  See also \fBCMAKE_ARGC\fP\&.
.SS CMAKE_AR
.sp
Name of archiving tool for static libraries.
.sp
This specifies the name of the program that creates archive or static
libraries.
.SS CMAKE_BINARY_DIR
.sp
The path to the top level of the build tree.
.sp
This is the full path to the top level of the current CMake build
tree.  For an in\-source build, this would be the same as
\fBCMAKE_SOURCE_DIR\fP\&.
.sp
When run in \-P script mode, CMake sets the variables
\fI\%CMAKE_BINARY_DIR\fP, \fBCMAKE_SOURCE_DIR\fP,
\fBCMAKE_CURRENT_BINARY_DIR\fP and
\fBCMAKE_CURRENT_SOURCE_DIR\fP to the current working directory.
.SS CMAKE_BUILD_TOOL
.sp
This variable exists only for backwards compatibility.
It contains the same value as \fBCMAKE_MAKE_PROGRAM\fP\&.
Use that variable instead.
.SS CMAKE_CACHEFILE_DIR
.sp
The directory with the \fBCMakeCache.txt\fP file.
.sp
This is the full path to the directory that has the \fBCMakeCache.txt\fP
file in it.  This is the same as \fBCMAKE_BINARY_DIR\fP\&.
.SS CMAKE_CACHE_MAJOR_VERSION
.sp
Major version of CMake used to create the \fBCMakeCache.txt\fP file
.sp
This stores the major version of CMake used to write a CMake cache
file.  It is only different when a different version of CMake is run
on a previously created cache file.
.SS CMAKE_CACHE_MINOR_VERSION
.sp
Minor version of CMake used to create the \fBCMakeCache.txt\fP file
.sp
This stores the minor version of CMake used to write a CMake cache
file.  It is only different when a different version of CMake is run
on a previously created cache file.
.SS CMAKE_CACHE_PATCH_VERSION
.sp
Patch version of CMake used to create the \fBCMakeCache.txt\fP file
.sp
This stores the patch version of CMake used to write a CMake cache
file.  It is only different when a different version of CMake is run
on a previously created cache file.
.SS CMAKE_CFG_INTDIR
.sp
Build\-time reference to per\-configuration output subdirectory.
.sp
For native build systems supporting multiple configurations in the
build tree (such as Visual Studio Generators and \fBXcode\fP),
the value is a reference to a build\-time variable specifying the name
of the per\-configuration output subdirectory.  On Makefile Generators
this evaluates to \fI\&.\fP because there is only one configuration in a build tree.
Example values:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
$(ConfigurationName) = Visual Studio 7, 8, 9
$(Configuration)     = Visual Studio 10
$(CONFIGURATION)     = Xcode
\&.                    = Make\-based tools
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
Since these values are evaluated by the native build system, this
variable is suitable only for use in command lines that will be
evaluated at build time.  Example of intended usage:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
add_executable(mytool mytool.c)
add_custom_command(
  OUTPUT out.txt
  COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mytool
          ${CMAKE_CURRENT_SOURCE_DIR}/in.txt out.txt
  DEPENDS mytool in.txt
  )
add_custom_target(drive ALL DEPENDS out.txt)
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
Note that \fBCMAKE_CFG_INTDIR\fP is no longer necessary for this purpose but
has been left for compatibility with existing projects.  Instead
\fBadd_custom_command()\fP recognizes executable target names in its
\fBCOMMAND\fP option, so
\fB${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mytool\fP can be replaced
by just \fBmytool\fP\&.
.sp
This variable is read\-only.  Setting it is undefined behavior.  In
multi\-configuration build systems the value of this variable is passed
as the value of preprocessor symbol \fBCMAKE_INTDIR\fP to the compilation
of all source files.
.SS CMAKE_COMMAND
.sp
The full path to the \fBcmake(1)\fP executable.
.sp
This is the full path to the CMake executable \fBcmake(1)\fP which is
useful from custom commands that want to use the \fBcmake \-E\fP option for
portable system commands.  (e.g.  \fB/usr/local/bin/cmake\fP)
.SS CMAKE_CROSSCOMPILING
.sp
Is CMake currently cross compiling.
.sp
This variable will be set to true by CMake if CMake is cross
compiling.  Specifically if the build platform is different from the
target platform.
.SS CMAKE_CROSSCOMPILING_EMULATOR
.sp
This variable is only used when \fBCMAKE_CROSSCOMPILING\fP is on. It
should point to a command on the host system that can run executable built
for the target system.
.sp
The command will be used to run \fBtry_run()\fP generated executables,
which avoids manual population of the TryRunResults.cmake file.
.sp
It is also used as the default value for the
\fBCROSSCOMPILING_EMULATOR\fP target property of executables.
.SS CMAKE_CTEST_COMMAND
.sp
Full path to \fBctest(1)\fP command installed with CMake.
.sp
This is the full path to the CTest executable \fBctest(1)\fP which is
useful from custom commands that want to use the \fBcmake(1)\fP \fB\-E\fP
option for portable system commands.
.SS CMAKE_CURRENT_BINARY_DIR
.sp
The path to the binary directory currently being processed.
.sp
This the full path to the build directory that is currently being
processed by cmake.  Each directory added by \fBadd_subdirectory()\fP will
create a binary directory in the build tree, and as it is being
processed this variable will be set.  For in\-source builds this is the
current source directory being processed.
.sp
When run in \-P script mode, CMake sets the variables
\fBCMAKE_BINARY_DIR\fP, \fBCMAKE_SOURCE_DIR\fP,
\fI\%CMAKE_CURRENT_BINARY_DIR\fP and
\fBCMAKE_CURRENT_SOURCE_DIR\fP to the current working directory.
.SS CMAKE_CURRENT_LIST_DIR
.sp
Full directory of the listfile currently being processed.
.sp
As CMake processes the listfiles in your project this variable will
always be set to the directory where the listfile which is currently
being processed (\fBCMAKE_CURRENT_LIST_FILE\fP) is located.  The value
has dynamic scope.  When CMake starts processing commands in a source file
it sets this variable to the directory where this file is located.
When CMake finishes processing commands from the file it restores the
previous value.  Therefore the value of the variable inside a macro or
function is the directory of the file invoking the bottom\-most entry
on the call stack, not the directory of the file containing the macro
or function definition.
.sp
See also \fBCMAKE_CURRENT_LIST_FILE\fP\&.
.SS CMAKE_CURRENT_LIST_FILE
.sp
Full path to the listfile currently being processed.
.sp
As CMake processes the listfiles in your project this variable will
always be set to the one currently being processed.  The value has
dynamic scope.  When CMake starts processing commands in a source file
it sets this variable to the location of the file.  When CMake
finishes processing commands from the file it restores the previous
value.  Therefore the value of the variable inside a macro or function
is the file invoking the bottom\-most entry on the call stack, not the
file containing the macro or function definition.
.sp
See also \fBCMAKE_PARENT_LIST_FILE\fP\&.
.SS CMAKE_CURRENT_LIST_LINE
.sp
The line number of the current file being processed.
.sp
This is the line number of the file currently being processed by
cmake.
.SS CMAKE_CURRENT_SOURCE_DIR
.sp
The path to the source directory currently being processed.
.sp
This the full path to the source directory that is currently being
processed by cmake.
.sp
When run in \-P script mode, CMake sets the variables
\fBCMAKE_BINARY_DIR\fP, \fBCMAKE_SOURCE_DIR\fP,
\fBCMAKE_CURRENT_BINARY_DIR\fP and
\fI\%CMAKE_CURRENT_SOURCE_DIR\fP to the current working directory.
.SS CMAKE_DL_LIBS
.sp
Name of library containing \fBdlopen\fP and \fBdlclose\fP\&.
.sp
The name of the library that has \fBdlopen\fP and \fBdlclose\fP in it, usually
\fB\-ldl\fP on most UNIX machines.
.SS CMAKE_EDIT_COMMAND
.sp
Full path to \fBcmake\-gui(1)\fP or \fBccmake(1)\fP\&.  Defined only for
Makefile Generators when not using an "extra" generator for an IDE.
.sp
This is the full path to the CMake executable that can graphically
edit the cache.  For example, \fBcmake\-gui(1)\fP or \fBccmake(1)\fP\&.
.SS CMAKE_EXECUTABLE_SUFFIX
.sp
The suffix for executables on this platform.
.sp
The suffix to use for the end of an executable filename if any, \fB\&.exe\fP
on Windows.
.sp
\fBCMAKE_EXECUTABLE_SUFFIX_<LANG>\fP overrides this for language \fB<LANG>\fP\&.
.SS CMAKE_EXTRA_GENERATOR
.sp
The extra generator used to build the project.  See
\fBcmake\-generators(7)\fP\&.
.sp
When using the Eclipse, CodeBlocks or KDevelop generators, CMake
generates Makefiles (\fBCMAKE_GENERATOR\fP) and additionally project
files for the respective IDE.  This IDE project file generator is stored in
\fBCMAKE_EXTRA_GENERATOR\fP (e.g.  \fBEclipse CDT4\fP).
.SS CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES
.sp
Additional suffixes for shared libraries.
.sp
Extensions for shared libraries other than that specified by
\fBCMAKE_SHARED_LIBRARY_SUFFIX\fP, if any.  CMake uses this to recognize
external shared library files during analysis of libraries linked by a
target.
.SS CMAKE_FIND_PACKAGE_NAME
.sp
Defined by the \fBfind_package()\fP command while loading
a find module to record the caller\-specified package name.
See command documentation for details.
.SS CMAKE_FIND_PACKAGE_SORT_DIRECTION
.sp
The sorting direction used by \fBCMAKE_FIND_PACKAGE_SORT_ORDER\fP\&.
It can assume one of the following values:
.INDENT 0.0
.TP
.B \fBDEC\fP
Default.  Ordering is done in descending mode.
The highest folder found will be tested first.
.TP
.B \fBASC\fP
Ordering is done in ascending mode.
The lowest folder found will be tested first.
.UNINDENT
.sp
If \fBCMAKE_FIND_PACKAGE_SORT_ORDER\fP is not set or is set to \fBNONE\fP
this variable has no effect.
.SS CMAKE_FIND_PACKAGE_SORT_ORDER
.sp
The default order for sorting packages found using \fBfind_package()\fP\&.
It can assume one of the following values:
.INDENT 0.0
.TP
.B \fBNONE\fP
Default.  No attempt is done to sort packages.
The first valid package found will be selected.
.TP
.B \fBNAME\fP
Sort packages lexicographically before selecting one.
.TP
.B \fBNATURAL\fP
Sort packages using natural order (see \fBstrverscmp(3)\fP manual),
i.e. such that contiguous digits are compared as whole numbers.
.UNINDENT
.sp
Natural sorting can be employed to return the highest version when multiple
versions of the same library are found by \fBfind_package()\fP\&.  For
example suppose that the following libraries have been found:
.INDENT 0.0
.IP \(bu 2
libX\-1.1.0
.IP \(bu 2
libX\-1.2.9
.IP \(bu 2
libX\-1.2.10
.UNINDENT
.sp
By setting \fBNATURAL\fP order we can select the one with the highest
version number \fBlibX\-1.2.10\fP\&.
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
set(CMAKE_FIND_PACKAGE_SORT_ORDER NATURAL)
find_package(libX CONFIG)
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
The sort direction can be controlled using the
\fBCMAKE_FIND_PACKAGE_SORT_DIRECTION\fP variable
(by default decrescent, e.g. lib\-B will be tested before lib\-A).
.SS CMAKE_GENERATOR
.sp
The generator used to build the project.  See \fBcmake\-generators(7)\fP\&.
.sp
The name of the generator that is being used to generate the build
files.  (e.g.  \fBUnix Makefiles\fP, \fBNinja\fP, etc.)
.SS CMAKE_GENERATOR_PLATFORM
.sp
Generator\-specific target platform name specified by user.
.sp
Some CMake generators support a target platform name to be given
to the native build system to choose a compiler toolchain.
If the user specifies a platform name (e.g. via the \fBcmake(1)\fP \fB\-A\fP
option) the value will be available in this variable.
.sp
The value of this variable should never be modified by project code.
A toolchain file specified by the \fBCMAKE_TOOLCHAIN_FILE\fP
variable may initialize \fBCMAKE_GENERATOR_PLATFORM\fP\&.  Once a given
build tree has been initialized with a particular value for this
variable, changing the value has undefined behavior.
.SS CMAKE_GENERATOR_TOOLSET
.sp
Native build system toolset name specified by user.
.sp
Some CMake generators support a toolset name to be given to the native
build system to choose a compiler.  If the user specifies a toolset
name (e.g.  via the \fBcmake(1)\fP \fB\-T\fP option) the value will be
available in this variable.
.sp
The value of this variable should never be modified by project code.
A toolchain file specified by the \fBCMAKE_TOOLCHAIN_FILE\fP
variable may initialize \fBCMAKE_GENERATOR_TOOLSET\fP\&.  Once a given
build tree has been initialized with a particular value for this
variable, changing the value has undefined behavior.
.SS CMAKE_HOME_DIRECTORY
.sp
Path to top of source tree.
.sp
This is the path to the top level of the source tree.
.SS CMAKE_IMPORT_LIBRARY_PREFIX
.sp
The prefix for import libraries that you link to.
.sp
The prefix to use for the name of an import library if used on this
platform.
.sp
\fBCMAKE_IMPORT_LIBRARY_PREFIX_<LANG>\fP overrides this for language \fB<LANG>\fP\&.
.SS CMAKE_IMPORT_LIBRARY_SUFFIX
.sp
The suffix for import libraries that you link to.
.sp
The suffix to use for the end of an import library filename if used on
this platform.
.sp
\fBCMAKE_IMPORT_LIBRARY_SUFFIX_<LANG>\fP overrides this for language \fB<LANG>\fP\&.
.SS CMAKE_JOB_POOL_COMPILE
.sp
This variable is used to initialize the \fBJOB_POOL_COMPILE\fP
property on all the targets. See \fBJOB_POOL_COMPILE\fP
for additional information.
.SS CMAKE_JOB_POOL_LINK
.sp
This variable is used to initialize the \fBJOB_POOL_LINK\fP
property on all the targets. See \fBJOB_POOL_LINK\fP
for additional information.
.SS CMAKE_LINK_LIBRARY_SUFFIX
.sp
The suffix for libraries that you link to.
.sp
The suffix to use for the end of a library filename, \fB\&.lib\fP on Windows.
.SS CMAKE_LINK_SEARCH_END_STATIC
.sp
End a link line such that static system libraries are used.
.sp
Some linkers support switches such as \fB\-Bstatic\fP and \fB\-Bdynamic\fP to
determine whether to use static or shared libraries for \fB\-lXXX\fP options.
CMake uses these options to set the link type for libraries whose full
paths are not known or (in some cases) are in implicit link
directories for the platform.  By default CMake adds an option at the
end of the library list (if necessary) to set the linker search type
back to its starting type.  This property switches the final linker
search type to \fB\-Bstatic\fP regardless of how it started.
.sp
This variable is used to initialize the target property
\fBLINK_SEARCH_END_STATIC\fP for all targets. If set, it\(aqs
value is also used by the \fBtry_compile()\fP command.
.sp
See also \fBCMAKE_LINK_SEARCH_START_STATIC\fP\&.
.SS CMAKE_LINK_SEARCH_START_STATIC
.sp
Assume the linker looks for static libraries by default.
.sp
Some linkers support switches such as \fB\-Bstatic\fP and \fB\-Bdynamic\fP to
determine whether to use static or shared libraries for \fB\-lXXX\fP options.
CMake uses these options to set the link type for libraries whose full
paths are not known or (in some cases) are in implicit link
directories for the platform.  By default the linker search type is
assumed to be \fB\-Bdynamic\fP at the beginning of the library list.  This
property switches the assumption to \fB\-Bstatic\fP\&.  It is intended for use
when linking an executable statically (e.g.  with the GNU \fB\-static\fP
option).
.sp
This variable is used to initialize the target property
\fBLINK_SEARCH_START_STATIC\fP for all targets.  If set, it\(aqs
value is also used by the \fBtry_compile()\fP command.
.sp
See also \fBCMAKE_LINK_SEARCH_END_STATIC\fP\&.
.SS CMAKE_MAJOR_VERSION
.sp
First version number component of the \fBCMAKE_VERSION\fP
variable.
.SS CMAKE_MAKE_PROGRAM
.sp
Tool that can launch the native build system.
The value may be the full path to an executable or just the tool
name if it is expected to be in the \fBPATH\fP\&.
.sp
The tool selected depends on the \fBCMAKE_GENERATOR\fP used
to configure the project:
.INDENT 0.0
.IP \(bu 2
The Makefile Generators set this to \fBmake\fP, \fBgmake\fP, or
a generator\-specific tool (e.g. \fBnmake\fP for \fBNMake Makefiles\fP).
.sp
These generators store \fBCMAKE_MAKE_PROGRAM\fP in the CMake cache
so that it may be edited by the user.
.IP \(bu 2
The \fBNinja\fP generator sets this to \fBninja\fP\&.
.sp
This generator stores \fBCMAKE_MAKE_PROGRAM\fP in the CMake cache
so that it may be edited by the user.
.IP \(bu 2
The \fBXcode\fP generator sets this to \fBxcodebuild\fP (or possibly an
otherwise undocumented \fBcmakexbuild\fP wrapper implementing some
workarounds).
.sp
This generator prefers to lookup the build tool at build time
rather than to store \fBCMAKE_MAKE_PROGRAM\fP in the CMake cache
ahead of time.  This is because \fBxcodebuild\fP is easy to find,
the \fBcmakexbuild\fP wrapper is needed only for older Xcode versions,
and the path to \fBcmakexbuild\fP may be outdated if CMake itself moves.
.sp
For compatibility with versions of CMake prior to 3.2, if
a user or project explicitly adds \fBCMAKE_MAKE_PROGRAM\fP to
the CMake cache then CMake will use the specified value.
.IP \(bu 2
The Visual Studio Generators set this to the full path to
\fBMSBuild.exe\fP (VS >= 10), \fBdevenv.com\fP (VS 7,8,9), or
\fBVCExpress.exe\fP (VS Express 8,9).
(See also variables
\fBCMAKE_VS_MSBUILD_COMMAND\fP and
\fBCMAKE_VS_DEVENV_COMMAND\fP\&.
.sp
These generators prefer to lookup the build tool at build time
rather than to store \fBCMAKE_MAKE_PROGRAM\fP in the CMake cache
ahead of time.  This is because the tools are version\-specific
and can be located using the Windows Registry.  It is also
necessary because the proper build tool may depend on the
project content (e.g. the Intel Fortran plugin to VS 10 and 11
requires \fBdevenv.com\fP to build its \fB\&.vfproj\fP project files
even though \fBMSBuild.exe\fP is normally preferred to support
the \fBCMAKE_GENERATOR_TOOLSET\fP).
.sp
For compatibility with versions of CMake prior to 3.0, if
a user or project explicitly adds \fBCMAKE_MAKE_PROGRAM\fP to
the CMake cache then CMake will use the specified value if
possible.
.IP \(bu 2
The \fBGreen Hills MULTI\fP generator sets this to \fBgbuild\fP\&.
If a user or project explicitly adds \fBCMAKE_MAKE_PROGRAM\fP to
the CMake cache then CMake will use the specified value.
.UNINDENT
.sp
The \fBCMAKE_MAKE_PROGRAM\fP variable is set for use by project code.
The value is also used by the \fBcmake(1)\fP \fB\-\-build\fP and
\fBctest(1)\fP \fB\-\-build\-and\-test\fP tools to launch the native
build process.
.SS CMAKE_MATCH_COUNT
.sp
The number of matches with the last regular expression.
.sp
When a regular expression match is used, CMake fills in \fBCMAKE_MATCH_<n>\fP
variables with the match contents. The \fBCMAKE_MATCH_COUNT\fP variable holds
the number of match expressions when these are filled.
.SS CMAKE_MINIMUM_REQUIRED_VERSION
.sp
Version specified to \fBcmake_minimum_required()\fP command
.sp
Variable containing the \fBVERSION\fP component specified in the
\fBcmake_minimum_required()\fP command.
.SS CMAKE_MINOR_VERSION
.sp
Second version number component of the \fBCMAKE_VERSION\fP
variable.
.SS CMAKE_PARENT_LIST_FILE
.sp
Full path to the CMake file that included the current one.
.sp
While processing a CMake file loaded by \fBinclude()\fP or
\fBfind_package()\fP this variable contains the full path to the file
including it.  The top of the include stack is always the \fBCMakeLists.txt\fP
for the current directory.  See also \fBCMAKE_CURRENT_LIST_FILE\fP\&.
.SS CMAKE_PATCH_VERSION
.sp
Third version number component of the \fBCMAKE_VERSION\fP
variable.
.SS CMAKE_PROJECT_NAME
.sp
The name of the current project.
.sp
This specifies name of the current project from the closest inherited
\fBproject()\fP command.
.SS CMAKE_RANLIB
.sp
Name of randomizing tool for static libraries.
.sp
This specifies name of the program that randomizes libraries on UNIX,
not used on Windows, but may be present.
.SS CMAKE_ROOT
.sp
Install directory for running cmake.
.sp
This is the install root for the running CMake and the \fBModules\fP
directory can be found here.  This is commonly used in this format:
\fB${CMAKE_ROOT}/Modules\fP
.SS CMAKE_SCRIPT_MODE_FILE
.sp
Full path to the \fBcmake(1)\fP \fB\-P\fP script file currently being
processed.
.sp
When run in \fBcmake(1)\fP \fB\-P\fP script mode, CMake sets this variable to
the full path of the script file.  When run to configure a \fBCMakeLists.txt\fP
file, this variable is not set.
.SS CMAKE_SHARED_LIBRARY_PREFIX
.sp
The prefix for shared libraries that you link to.
.sp
The prefix to use for the name of a shared library, \fBlib\fP on UNIX.
.sp
\fBCMAKE_SHARED_LIBRARY_PREFIX_<LANG>\fP overrides this for language \fB<LANG>\fP\&.
.SS CMAKE_SHARED_LIBRARY_SUFFIX
.sp
The suffix for shared libraries that you link to.
.sp
The suffix to use for the end of a shared library filename, \fB\&.dll\fP on
Windows.
.sp
\fBCMAKE_SHARED_LIBRARY_SUFFIX_<LANG>\fP overrides this for language \fB<LANG>\fP\&.
.SS CMAKE_SHARED_MODULE_PREFIX
.sp
The prefix for loadable modules that you link to.
.sp
The prefix to use for the name of a loadable module on this platform.
.sp
\fBCMAKE_SHARED_MODULE_PREFIX_<LANG>\fP overrides this for language \fB<LANG>\fP\&.
.SS CMAKE_SHARED_MODULE_SUFFIX
.sp
The suffix for shared libraries that you link to.
.sp
The suffix to use for the end of a loadable module filename on this
platform
.sp
\fBCMAKE_SHARED_MODULE_SUFFIX_<LANG>\fP overrides this for language \fB<LANG>\fP\&.
.SS CMAKE_SIZEOF_VOID_P
.sp
Size of a \fBvoid\fP pointer.
.sp
This is set to the size of a pointer on the target machine, and is determined
by a try compile.  If a 64\-bit size is found, then the library search
path is modified to look for 64\-bit libraries first.
.SS CMAKE_SKIP_INSTALL_RULES
.sp
Whether to disable generation of installation rules.
.sp
If \fBTRUE\fP, cmake will neither generate installaton rules nor
will it generate \fBcmake_install.cmake\fP files. This variable is \fBFALSE\fP by
default.
.SS CMAKE_SKIP_RPATH
.sp
If true, do not add run time path information.
.sp
If this is set to \fBTRUE\fP, then the rpath information is not added to
compiled executables.  The default is to add rpath information if the
platform supports it.  This allows for easy running from the build
tree.  To omit RPATH in the install step, but not the build step, use
\fBCMAKE_SKIP_INSTALL_RPATH\fP instead.
.SS CMAKE_SOURCE_DIR
.sp
The path to the top level of the source tree.
.sp
This is the full path to the top level of the current CMake source
tree.  For an in\-source build, this would be the same as
\fBCMAKE_BINARY_DIR\fP\&.
.sp
When run in \-P script mode, CMake sets the variables
\fBCMAKE_BINARY_DIR\fP, \fI\%CMAKE_SOURCE_DIR\fP,
\fBCMAKE_CURRENT_BINARY_DIR\fP and
\fBCMAKE_CURRENT_SOURCE_DIR\fP to the current working directory.
.SS CMAKE_STATIC_LIBRARY_PREFIX
.sp
The prefix for static libraries that you link to.
.sp
The prefix to use for the name of a static library, \fBlib\fP on UNIX.
.sp
\fBCMAKE_STATIC_LIBRARY_PREFIX_<LANG>\fP overrides this for language \fB<LANG>\fP\&.
.SS CMAKE_STATIC_LIBRARY_SUFFIX
.sp
The suffix for static libraries that you link to.
.sp
The suffix to use for the end of a static library filename, \fB\&.lib\fP on
Windows.
.sp
\fBCMAKE_STATIC_LIBRARY_SUFFIX_<LANG>\fP overrides this for language \fB<LANG>\fP\&.
.SS CMAKE_TOOLCHAIN_FILE
.sp
Path to toolchain file supplied to \fBcmake(1)\fP\&.
.sp
This variable is specified on the command line when cross\-compiling with CMake.
It is the path to a file which is read early in the CMake run and which
specifies locations for compilers and toolchain utilities, and other target
platform and compiler related information.
.SS CMAKE_TWEAK_VERSION
.sp
Defined to \fB0\fP for compatibility with code written for older
CMake versions that may have defined higher values.
.sp
\fBNOTE:\fP
.INDENT 0.0
.INDENT 3.5
In CMake versions 2.8.2 through 2.8.12, this variable holds
the fourth version number component of the
\fBCMAKE_VERSION\fP variable.
.UNINDENT
.UNINDENT
.SS CMAKE_VERBOSE_MAKEFILE
.sp
Enable verbose output from Makefile builds.
.sp
This variable is a cache entry initialized (to \fBFALSE\fP) by
the \fBproject()\fP command.  Users may enable the option
in their local build tree to get more verbose output from
Makefile builds and show each command line as it is launched.
.SS CMAKE_VERSION
.sp
The CMake version string as three non\-negative integer components
separated by \fB\&.\fP and possibly followed by \fB\-\fP and other information.
The first two components represent the feature level and the third
component represents either a bug\-fix level or development date.
.sp
Release versions and release candidate versions of CMake use the format:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
<major>.<minor>.<patch>[\-rc<n>]
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
where the \fB<patch>\fP component is less than \fB20000000\fP\&.  Development
versions of CMake use the format:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
<major>.<minor>.<date>[\-<id>]
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
where the \fB<date>\fP component is of format \fBCCYYMMDD\fP and \fB<id>\fP
may contain arbitrary text.  This represents development as of a
particular date following the \fB<major>.<minor>\fP feature release.
.sp
Individual component values are also available in variables:
.INDENT 0.0
.IP \(bu 2
\fBCMAKE_MAJOR_VERSION\fP
.IP \(bu 2
\fBCMAKE_MINOR_VERSION\fP
.IP \(bu 2
\fBCMAKE_PATCH_VERSION\fP
.IP \(bu 2
\fBCMAKE_TWEAK_VERSION\fP
.UNINDENT
.sp
Use the \fBif()\fP command \fBVERSION_LESS\fP, \fBVERSION_GREATER\fP,
\fBVERSION_EQUAL\fP, \fBVERSION_LESS_EQUAL\fP, or \fBVERSION_GREATER_EQUAL\fP
operators to compare version string values against \fBCMAKE_VERSION\fP using a
component\-wise test.  Version component values may be 10 or larger so do not
attempt to compare version strings as floating\-point numbers.
.sp
\fBNOTE:\fP
.INDENT 0.0
.INDENT 3.5
CMake versions 2.8.2 through 2.8.12 used three components for the
feature level.  Release versions represented the bug\-fix level in a
fourth component, i.e. \fB<major>.<minor>.<patch>[.<tweak>][\-rc<n>]\fP\&.
Development versions represented the development date in the fourth
component, i.e. \fB<major>.<minor>.<patch>.<date>[\-<id>]\fP\&.
.sp
CMake versions prior to 2.8.2 used three components for the
feature level and had no bug\-fix component.  Release versions
used an even\-valued second component, i.e.
\fB<major>.<even\-minor>.<patch>[\-rc<n>]\fP\&.  Development versions
used an odd\-valued second component with the development date as
the third component, i.e. \fB<major>.<odd\-minor>.<date>\fP\&.
.sp
The \fBCMAKE_VERSION\fP variable is defined by CMake 2.6.3 and higher.
Earlier versions defined only the individual component variables.
.UNINDENT
.UNINDENT
.SS CMAKE_VS_DEVENV_COMMAND
.sp
The generators for \fBVisual Studio 7\fP and above set this
variable to the \fBdevenv.com\fP command installed with the corresponding
Visual Studio version.  Note that this variable may be empty on
Visual Studio Express editions because they do not provide this tool.
.sp
This variable is not defined by other generators even if \fBdevenv.com\fP
is installed on the computer.
.sp
The \fBCMAKE_VS_MSBUILD_COMMAND\fP is also provided for
\fBVisual Studio 10 2010\fP and above.
See also the \fBCMAKE_MAKE_PROGRAM\fP variable.
.SS CMAKE_VS_INTEL_Fortran_PROJECT_VERSION
.sp
When generating for \fBVisual Studio 7\fP or greater with the Intel
Fortran plugin installed, this specifies the \fB\&.vfproj\fP project file format
version.  This is intended for internal use by CMake and should not be
used by project code.
.SS CMAKE_VS_MSBUILD_COMMAND
.sp
The generators for \fBVisual Studio 10 2010\fP and above set this
variable to the \fBMSBuild.exe\fP command installed with the corresponding
Visual Studio version.
.sp
This variable is not defined by other generators even if \fBMSBuild.exe\fP
is installed on the computer.
.sp
The \fBCMAKE_VS_DEVENV_COMMAND\fP is also provided for the
non\-Express editions of Visual Studio.
See also the \fBCMAKE_MAKE_PROGRAM\fP variable.
.SS CMAKE_VS_NsightTegra_VERSION
.sp
When using a Visual Studio generator with the
\fBCMAKE_SYSTEM_NAME\fP variable set to \fBAndroid\fP,
this variable contains the version number of the
installed NVIDIA Nsight Tegra Visual Studio Edition.
.SS CMAKE_VS_PLATFORM_NAME
.sp
Visual Studio target platform name.
.sp
VS 8 and above allow project files to specify a target platform.
CMake provides the name of the chosen platform in this variable.
.SS CMAKE_VS_PLATFORM_TOOLSET
.sp
Visual Studio Platform Toolset name.
.sp
VS 10 and above use MSBuild under the hood and support multiple
compiler toolchains.  CMake may specify a toolset explicitly, such as
\fBv110\fP for VS 11 or \fBWindows7.1SDK\fP for 64\-bit support in VS 10
Express.  CMake provides the name of the chosen toolset in this
variable.
.SS CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE
.sp
Visual Studio preferred tool architecture.
.sp
The Visual Studio Generators for VS 2013 and above support optional
selection of a 64\-bit toolchain on 64\-bit hosts by specifying a \fBhost=x64\fP
value in the \fBCMAKE_GENERATOR_TOOLSET\fP option.  CMake provides
the selected toolchain architecture preference in this variable (either
\fBx64\fP or empty).
.SS CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
.sp
Visual Studio Windows Target Platform Version.
.sp
When targeting Windows 10 and above Visual Studio 2015 and above support
specification of a target Windows version to select a corresponding SDK.
The \fBCMAKE_SYSTEM_VERSION\fP variable may be set to specify a
version.  Otherwise CMake computes a default version based on the Windows
SDK versions available.  The chosen Windows target version number is provided
in \fBCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION\fP\&.  If no Windows 10 SDK
is available this value will be empty.
.SS CMAKE_XCODE_PLATFORM_TOOLSET
.sp
Xcode compiler selection.
.sp
\fBXcode\fP supports selection of a compiler from one of the installed
toolsets.  CMake provides the name of the chosen toolset in this
variable, if any is explicitly selected (e.g.  via the \fBcmake(1)\fP
\fB\-T\fP option).
.SS PROJECT_BINARY_DIR
.sp
Full path to build directory for project.
.sp
This is the binary directory of the most recent \fBproject()\fP command.
.SS <PROJECT\-NAME>_BINARY_DIR
.sp
Top level binary directory for the named project.
.sp
A variable is created with the name used in the \fBproject()\fP command,
and is the binary directory for the project.  This can be useful when
\fBadd_subdirectory()\fP is used to connect several projects.
.SS PROJECT_NAME
.sp
Name of the project given to the project command.
.sp
This is the name given to the most recent \fBproject()\fP command.
.SS <PROJECT\-NAME>_SOURCE_DIR
.sp
Top level source directory for the named project.
.sp
A variable is created with the name used in the \fBproject()\fP command,
and is the source directory for the project.  This can be useful when
\fBadd_subdirectory()\fP is used to connect several projects.
.SS <PROJECT\-NAME>_VERSION
.sp
Value given to the \fBVERSION\fP option of the most recent call to the
\fBproject()\fP command with project name \fB<PROJECT\-NAME>\fP, if any.
.sp
See also the component\-wise version variables
\fB<PROJECT\-NAME>_VERSION_MAJOR\fP,
\fB<PROJECT\-NAME>_VERSION_MINOR\fP,
\fB<PROJECT\-NAME>_VERSION_PATCH\fP, and
\fB<PROJECT\-NAME>_VERSION_TWEAK\fP\&.
.SS <PROJECT\-NAME>_VERSION_MAJOR
.sp
First version number component of the \fB<PROJECT\-NAME>_VERSION\fP
variable as set by the \fBproject()\fP command.
.SS <PROJECT\-NAME>_VERSION_MINOR
.sp
Second version number component of the \fB<PROJECT\-NAME>_VERSION\fP
variable as set by the \fBproject()\fP command.
.SS <PROJECT\-NAME>_VERSION_PATCH
.sp
Third version number component of the \fB<PROJECT\-NAME>_VERSION\fP
variable as set by the \fBproject()\fP command.
.SS <PROJECT\-NAME>_VERSION_TWEAK
.sp
Fourth version number component of the \fB<PROJECT\-NAME>_VERSION\fP
variable as set by the \fBproject()\fP command.
.SS PROJECT_SOURCE_DIR
.sp
Top level source directory for the current project.
.sp
This is the source directory of the most recent \fBproject()\fP command.
.SS PROJECT_VERSION
.sp
Value given to the \fBVERSION\fP option of the most recent call to the
\fBproject()\fP command, if any.
.sp
See also the component\-wise version variables
\fBPROJECT_VERSION_MAJOR\fP,
\fBPROJECT_VERSION_MINOR\fP,
\fBPROJECT_VERSION_PATCH\fP, and
\fBPROJECT_VERSION_TWEAK\fP\&.
.SS PROJECT_VERSION_MAJOR
.sp
First version number component of the \fBPROJECT_VERSION\fP
variable as set by the \fBproject()\fP command.
.SS PROJECT_VERSION_MINOR
.sp
Second version number component of the \fBPROJECT_VERSION\fP
variable as set by the \fBproject()\fP command.
.SS PROJECT_VERSION_PATCH
.sp
Third version number component of the \fBPROJECT_VERSION\fP
variable as set by the \fBproject()\fP command.
.SS PROJECT_VERSION_TWEAK
.sp
Fourth version number component of the \fBPROJECT_VERSION\fP
variable as set by the \fBproject()\fP command.
.SH VARIABLES THAT CHANGE BEHAVIOR
.SS BUILD_SHARED_LIBS
.sp
Global flag to cause \fBadd_library()\fP to create shared libraries if on.
.sp
If present and true, this will cause all libraries to be built shared
unless the library was explicitly added as a static library.  This
variable is often added to projects as an \fBoption()\fP so that each user
of a project can decide if they want to build the project using shared or
static libraries.
.SS CMAKE_ABSOLUTE_DESTINATION_FILES
.sp
List of files which have been installed using an \fBABSOLUTE DESTINATION\fP path.
.sp
This variable is defined by CMake\-generated \fBcmake_install.cmake\fP
scripts.  It can be used (read\-only) by programs or scripts that
source those install scripts.  This is used by some CPack generators
(e.g.  RPM).
.SS CMAKE_APPBUNDLE_PATH
.sp
;\-list of directories specifying a search path
for OS X application bundles used by the \fBfind_program()\fP, and
\fBfind_package()\fP commands.
.SS CMAKE_AUTOMOC_RELAXED_MODE
.sp
Switch between strict and relaxed automoc mode.
.sp
By default, \fBAUTOMOC\fP behaves exactly as described in the
documentation of the \fBAUTOMOC\fP target property.  When set to
\fBTRUE\fP, it accepts more input and tries to find the correct input file for
\fBmoc\fP even if it differs from the documented behaviour.  In this mode it
e.g.  also checks whether a header file is intended to be processed by moc
when a \fB"foo.moc"\fP file has been included.
.sp
Relaxed mode has to be enabled for KDE4 compatibility.
.SS CMAKE_BACKWARDS_COMPATIBILITY
.sp
Deprecated.  See CMake Policy \fBCMP0001\fP documentation.
.SS CMAKE_BUILD_TYPE
.sp
Specifies the build type on single\-configuration generators.
.sp
This statically specifies what build type (configuration) will be
built in this build tree.  Possible values are empty, \fBDebug\fP, \fBRelease\fP,
\fBRelWithDebInfo\fP and \fBMinSizeRel\fP\&.  This variable is only meaningful to
single\-configuration generators (such as Makefile Generators and
\fBNinja\fP) i.e.  those which choose a single configuration when CMake
runs to generate a build tree as opposed to multi\-configuration generators
which offer selection of the build configuration within the generated build
environment.  There are many per\-config properties and variables
(usually following clean \fBSOME_VAR_<CONFIG>\fP order conventions), such as
\fBCMAKE_C_FLAGS_<CONFIG>\fP, specified as uppercase:
\fBCMAKE_C_FLAGS_[DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL]\fP\&.  For example,
in a build tree configured to build type \fBDebug\fP, CMake will see to
having \fBCMAKE_C_FLAGS_DEBUG\fP settings get
added to the \fBCMAKE_C_FLAGS\fP settings.  See
also \fBCMAKE_CONFIGURATION_TYPES\fP\&.
.SS CMAKE_CODELITE_USE_TARGETS
.sp
Change the way the CodeLite generator creates projectfiles.
.sp
If this variable evaluates to \fBON\fP at the end of the top\-level
\fBCMakeLists.txt\fP file, the generator creates projectfiles based on targets
rather than projects.
.SS CMAKE_COLOR_MAKEFILE
.sp
Enables color output when using the Makefile Generators\&.
.sp
When enabled, the generated Makefiles will produce colored output.
Default is \fBON\fP\&.
.SS CMAKE_CONFIGURATION_TYPES
.sp
Specifies the available build types on multi\-config generators.
.sp
This specifies what build types (configurations) will be available
such as \fBDebug\fP, \fBRelease\fP, \fBRelWithDebInfo\fP etc.  This has reasonable
defaults on most platforms, but can be extended to provide other build
types.  See also \fBCMAKE_BUILD_TYPE\fP for details of managing
configuration data, and \fBCMAKE_CFG_INTDIR\fP\&.
.SS CMAKE_DEBUG_TARGET_PROPERTIES
.sp
Enables tracing output for target properties.
.sp
This variable can be populated with a list of properties to generate
debug output for when evaluating target properties.  Currently it can
only be used when evaluating the \fBINCLUDE_DIRECTORIES\fP,
\fBCOMPILE_DEFINITIONS\fP, \fBCOMPILE_OPTIONS\fP,
\fBAUTOUIC_OPTIONS\fP, \fBSOURCES\fP, \fBCOMPILE_FEATURES\fP,
\fBPOSITION_INDEPENDENT_CODE\fP target properties and any other property
listed in \fBCOMPATIBLE_INTERFACE_STRING\fP and other
\fBCOMPATIBLE_INTERFACE_\fP properties.  It outputs an origin for each entry in
the target property.  Default is unset.
.SS CMAKE_DEPENDS_IN_PROJECT_ONLY
.sp
When set to \fBTRUE\fP in a directory, the build system produced by the
Makefile Generators is set up to only consider dependencies on source
files that appear either in the source or in the binary directories.  Changes
to source files outside of these directories will not cause rebuilds.
.sp
This should be used carefully in cases where some source files are picked up
through external headers during the build.
.SS CMAKE_DISABLE_FIND_PACKAGE_<PackageName>
.sp
Variable for disabling \fBfind_package()\fP calls.
.sp
Every non\-\fBREQUIRED\fP \fBfind_package()\fP call in a project can be
disabled by setting the variable
\fBCMAKE_DISABLE_FIND_PACKAGE_<PackageName>\fP to \fBTRUE\fP\&.
This can be used to build a project without an optional package,
although that package is installed.
.sp
This switch should be used during the initial CMake run.  Otherwise if
the package has already been found in a previous CMake run, the
variables which have been stored in the cache will still be there.  In
that case it is recommended to remove the cache variables for this
package from the cache using the cache editor or \fBcmake(1)\fP \fB\-U\fP
.SS CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES
.sp
This cache variable is used by the Eclipse project generator.  See
\fBcmake\-generators(7)\fP\&.
.sp
The Eclipse project generator generates so\-called linked resources
e.g. to the subproject root dirs in the source tree or to the source files
of targets.
This can be disabled by setting this variable to FALSE.
.SS CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT
.sp
This cache variable is used by the Eclipse project generator.  See
\fBcmake\-generators(7)\fP\&.
.sp
If this variable is set to TRUE, the Eclipse project generator will generate
an Eclipse project in \fBCMAKE_SOURCE_DIR\fP . This project can then
be used in Eclipse e.g. for the version control functionality.
\fI\%CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT\fP defaults to FALSE; so
nothing is written into the source directory.
.SS CMAKE_ECLIPSE_MAKE_ARGUMENTS
.sp
This cache variable is used by the Eclipse project generator.  See
\fBcmake\-generators(7)\fP\&.
.sp
This variable holds arguments which are used when Eclipse invokes the make
tool. By default it is initialized to hold flags to enable parallel builds
(using \-j typically).
.SS CMAKE_ECLIPSE_VERSION
.sp
This cache variable is used by the Eclipse project generator.  See
\fBcmake\-generators(7)\fP\&.
.sp
When using the Eclipse project generator, CMake tries to find the Eclipse
executable and detect the version of it. Depending on the version it finds,
some features are enabled or disabled. If CMake doesn\(aqt find
Eclipse, it assumes the oldest supported version, Eclipse Callisto (3.2).
.SS CMAKE_ERROR_DEPRECATED
.sp
Whether to issue errors for deprecated functionality.
.sp
If \fBTRUE\fP, use of deprecated functionality will issue fatal errors.
If this variable is not set, CMake behaves as if it were set to \fBFALSE\fP\&.
.SS CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION
.sp
Ask \fBcmake_install.cmake\fP script to error out as soon as a file with
absolute \fBINSTALL DESTINATION\fP is encountered.
.sp
The fatal error is emitted before the installation of the offending
file takes place.  This variable is used by CMake\-generated
\fBcmake_install.cmake\fP scripts.  If one sets this variable to \fBON\fP while
running the script, it may get fatal error messages from the script.
.SS CMAKE_EXPORT_COMPILE_COMMANDS
.sp
Enable/Disable output of compile commands during generation.
.sp
If enabled, generates a \fBcompile_commands.json\fP file containing the exact
compiler calls for all translation units of the project in machine\-readable
form.  The format of the JSON file looks like:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
[
  {
    "directory": "/home/user/development/project",
    "command": "/usr/bin/c++ ... \-c ../foo/foo.cc",
    "file": "../foo/foo.cc"
  },

  ...

  {
    "directory": "/home/user/development/project",
    "command": "/usr/bin/c++ ... \-c ../foo/bar.cc",
    "file": "../foo/bar.cc"
  }
]
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
\fBNOTE:\fP
.INDENT 0.0
.INDENT 3.5
This option is implemented only by Makefile Generators
and the \fBNinja\fP\&.  It is ignored on other generators.
.UNINDENT
.UNINDENT
.SS CMAKE_EXPORT_NO_PACKAGE_REGISTRY
.sp
Disable the \fBexport(PACKAGE)\fP command.
.sp
In some cases, for example for packaging and for system wide
installations, it is not desirable to write the user package registry.
If the \fI\%CMAKE_EXPORT_NO_PACKAGE_REGISTRY\fP variable is enabled,
the \fBexport(PACKAGE)\fP command will do nothing.
.sp
See also Disabling the Package Registry\&.
.SS CMAKE_SYSROOT
.sp
Path to pass to the compiler in the \fB\-\-sysroot\fP flag.
.sp
The \fBCMAKE_SYSROOT\fP content is passed to the compiler in the \fB\-\-sysroot\fP
flag, if supported.  The path is also stripped from the RPATH/RUNPATH if
necessary on installation.  The \fBCMAKE_SYSROOT\fP is also used to prefix
paths searched by the \fBfind_*\fP commands.
.sp
This variable may only be set in a toolchain file specified by
the \fBCMAKE_TOOLCHAIN_FILE\fP variable.
.SS CMAKE_FIND_APPBUNDLE
.sp
This variable affects how \fBfind_*\fP commands choose between
OS X Application Bundles and unix\-style package components.
.sp
On Darwin or systems supporting OS X Application Bundles, the
\fBCMAKE_FIND_APPBUNDLE\fP variable can be set to empty or
one of the following:
.INDENT 0.0
.TP
.B \fBFIRST\fP
Try to find application bundles before standard programs.
This is the default on Darwin.
.TP
.B \fBLAST\fP
Try to find application bundles after standard programs.
.TP
.B \fBONLY\fP
Only try to find application bundles.
.TP
.B \fBNEVER\fP
Never try to find application bundles.
.UNINDENT
.SS CMAKE_FIND_FRAMEWORK
.sp
This variable affects how \fBfind_*\fP commands choose between
OS X Frameworks and unix\-style package components.
.sp
On Darwin or systems supporting OS X Frameworks, the
\fBCMAKE_FIND_FRAMEWORK\fP variable can be set to empty or
one of the following:
.INDENT 0.0
.TP
.B \fBFIRST\fP
Try to find frameworks before standard libraries or headers.
This is the default on Darwin.
.TP
.B \fBLAST\fP
Try to find frameworks after standard libraries or headers.
.TP
.B \fBONLY\fP
Only try to find frameworks.
.TP
.B \fBNEVER\fP
Never try to find frameworks.
.UNINDENT
.SS CMAKE_FIND_LIBRARY_PREFIXES
.sp
Prefixes to prepend when looking for libraries.
.sp
This specifies what prefixes to add to library names when the
\fBfind_library()\fP command looks for libraries.  On UNIX systems this is
typically \fBlib\fP, meaning that when trying to find the \fBfoo\fP library it
will look for \fBlibfoo\fP\&.
.SS CMAKE_FIND_LIBRARY_SUFFIXES
.sp
Suffixes to append when looking for libraries.
.sp
This specifies what suffixes to add to library names when the
\fBfind_library()\fP command looks for libraries.  On Windows systems this
is typically \fB\&.lib\fP and \fB\&.dll\fP, meaning that when trying to find the
\fBfoo\fP library it will look for \fBfoo.dll\fP etc.
.SS CMAKE_FIND_NO_INSTALL_PREFIX
.sp
Ignore the \fBCMAKE_INSTALL_PREFIX\fP when searching for assets.
.sp
CMake adds the \fBCMAKE_INSTALL_PREFIX\fP and the
\fBCMAKE_STAGING_PREFIX\fP variable to the
\fBCMAKE_SYSTEM_PREFIX_PATH\fP by default. This variable may be set
on the command line to control that behavior.
.sp
Set \fBCMAKE_FIND_NO_INSTALL_PREFIX\fP to \fBTRUE\fP to tell
\fBfind_package()\fP not to search in the \fBCMAKE_INSTALL_PREFIX\fP
or \fBCMAKE_STAGING_PREFIX\fP by default.  Note that the
prefix may still be searched for other reasons, such as being the same prefix
as the CMake installation, or for being a built\-in system prefix.
.SS CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY
.sp
Skip User Package Registry in \fBfind_package()\fP calls.
.sp
In some cases, for example to locate only system wide installations, it
is not desirable to use the User Package Registry when searching
for packages. If the \fI\%CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY\fP
variable is enabled, all the \fBfind_package()\fP commands will skip
the User Package Registry as if they were called with the
\fBNO_CMAKE_PACKAGE_REGISTRY\fP argument.
.sp
See also Disabling the Package Registry\&.
.SS CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY
.sp
Skip System Package Registry in \fBfind_package()\fP calls.
.sp
In some cases, it is not desirable to use the
System Package Registry when searching for packages. If the
\fI\%CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY\fP variable is
enabled, all the \fBfind_package()\fP commands will skip
the System Package Registry as if they were called with the
\fBNO_CMAKE_SYSTEM_PACKAGE_REGISTRY\fP argument.
.sp
See also Disabling the Package Registry\&.
.SS CMAKE_FIND_PACKAGE_WARN_NO_MODULE
.sp
Tell \fBfind_package()\fP to warn if called without an explicit mode.
.sp
If \fBfind_package()\fP is called without an explicit mode option
(\fBMODULE\fP, \fBCONFIG\fP, or \fBNO_MODULE\fP) and no \fBFind<pkg>.cmake\fP module
is in \fBCMAKE_MODULE_PATH\fP then CMake implicitly assumes that the
caller intends to search for a package configuration file.  If no package
configuration file is found then the wording of the failure message
must account for both the case that the package is really missing and
the case that the project has a bug and failed to provide the intended
Find module.  If instead the caller specifies an explicit mode option
then the failure message can be more specific.
.sp
Set \fBCMAKE_FIND_PACKAGE_WARN_NO_MODULE\fP to \fBTRUE\fP to tell
\fBfind_package()\fP to warn when it implicitly assumes Config mode.  This
helps developers enforce use of an explicit mode in all calls to
\fBfind_package()\fP within a project.
.SS CMAKE_FIND_ROOT_PATH
.sp
;\-list of root paths to search on the filesystem.
.sp
This variable is most useful when cross\-compiling. CMake uses the paths in
this list as alternative roots to find filesystem items with
\fBfind_package()\fP, \fBfind_library()\fP etc.
.SS CMAKE_FIND_ROOT_PATH_MODE_INCLUDE
.sp
This variable controls whether the \fBCMAKE_FIND_ROOT_PATH\fP and
\fBCMAKE_SYSROOT\fP are used by \fBfind_file()\fP and \fBfind_path()\fP\&.
.sp
If set to \fBONLY\fP, then only the roots in \fBCMAKE_FIND_ROOT_PATH\fP
will be searched. If set to \fBNEVER\fP, then the roots in
\fBCMAKE_FIND_ROOT_PATH\fP will be ignored and only the host system
root will be used. If set to \fBBOTH\fP, then the host system paths and the
paths in \fBCMAKE_FIND_ROOT_PATH\fP will be searched.
.SS CMAKE_FIND_ROOT_PATH_MODE_LIBRARY
.sp
This variable controls whether the \fBCMAKE_FIND_ROOT_PATH\fP and
\fBCMAKE_SYSROOT\fP are used by \fBfind_library()\fP\&.
.sp
If set to \fBONLY\fP, then only the roots in \fBCMAKE_FIND_ROOT_PATH\fP
will be searched. If set to \fBNEVER\fP, then the roots in
\fBCMAKE_FIND_ROOT_PATH\fP will be ignored and only the host system
root will be used. If set to \fBBOTH\fP, then the host system paths and the
paths in \fBCMAKE_FIND_ROOT_PATH\fP will be searched.
.SS CMAKE_FIND_ROOT_PATH_MODE_PACKAGE
.sp
This variable controls whether the \fBCMAKE_FIND_ROOT_PATH\fP and
\fBCMAKE_SYSROOT\fP are used by \fBfind_package()\fP\&.
.sp
If set to \fBONLY\fP, then only the roots in \fBCMAKE_FIND_ROOT_PATH\fP
will be searched. If set to \fBNEVER\fP, then the roots in
\fBCMAKE_FIND_ROOT_PATH\fP will be ignored and only the host system
root will be used. If set to \fBBOTH\fP, then the host system paths and the
paths in \fBCMAKE_FIND_ROOT_PATH\fP will be searched.
.SS CMAKE_FIND_ROOT_PATH_MODE_PROGRAM
.sp
This variable controls whether the \fBCMAKE_FIND_ROOT_PATH\fP and
\fBCMAKE_SYSROOT\fP are used by \fBfind_program()\fP\&.
.sp
If set to \fBONLY\fP, then only the roots in \fBCMAKE_FIND_ROOT_PATH\fP
will be searched. If set to \fBNEVER\fP, then the roots in
\fBCMAKE_FIND_ROOT_PATH\fP will be ignored and only the host system
root will be used. If set to \fBBOTH\fP, then the host system paths and the
paths in \fBCMAKE_FIND_ROOT_PATH\fP will be searched.
.SS CMAKE_FRAMEWORK_PATH
.sp
;\-list of directories specifying a search path
for OS X frameworks used by the \fBfind_library()\fP,
\fBfind_package()\fP, \fBfind_path()\fP, and \fBfind_file()\fP
commands.
.SS CMAKE_IGNORE_PATH
.sp
;\-list of directories to be \fIignored\fP by
the \fBfind_program()\fP, \fBfind_library()\fP, \fBfind_file()\fP,
and \fBfind_path()\fP commands.  This is useful in cross\-compiling
environments where some system directories contain incompatible but
possibly linkable libraries.  For example, on cross\-compiled cluster
environments, this allows a user to ignore directories containing
libraries meant for the front\-end machine.
.sp
By default this is empty; it is intended to be set by the project.
Note that \fBCMAKE_IGNORE_PATH\fP takes a list of directory names, \fInot\fP
a list of prefixes.  To ignore paths under prefixes (\fBbin\fP, \fBinclude\fP,
\fBlib\fP, etc.), specify them explicitly.
.sp
See also the \fBCMAKE_PREFIX_PATH\fP, \fBCMAKE_LIBRARY_PATH\fP,
\fBCMAKE_INCLUDE_PATH\fP, and \fBCMAKE_PROGRAM_PATH\fP variables.
.SS CMAKE_INCLUDE_PATH
.sp
;\-list of directories specifying a search path
for the \fBfind_file()\fP and \fBfind_path()\fP commands.  By default it
is empty, it is intended to be set by the project.  See also
\fBCMAKE_SYSTEM_INCLUDE_PATH\fP and \fBCMAKE_PREFIX_PATH\fP\&.
.SS CMAKE_INCLUDE_DIRECTORIES_BEFORE
.sp
Whether to append or prepend directories by default in
\fBinclude_directories()\fP\&.
.sp
This variable affects the default behavior of the \fBinclude_directories()\fP
command.  Setting this variable to \fBON\fP is equivalent to using the \fBBEFORE\fP
option in all uses of that command.
.SS CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE
.sp
Whether to force prepending of project include directories.
.sp
This variable affects the order of include directories generated in compiler
command lines.  If set to \fBON\fP, it causes the \fBCMAKE_SOURCE_DIR\fP
and the \fBCMAKE_BINARY_DIR\fP to appear first.
.SS CMAKE_INSTALL_DEFAULT_COMPONENT_NAME
.sp
Default component used in \fBinstall()\fP commands.
.sp
If an \fBinstall()\fP command is used without the \fBCOMPONENT\fP argument,
these files will be grouped into a default component.  The name of this
default install component will be taken from this variable.  It
defaults to \fBUnspecified\fP\&.
.SS CMAKE_INSTALL_MESSAGE
.sp
Specify verbosity of installation script code generated by the
\fBinstall()\fP command (using the \fBfile(INSTALL)\fP command).
For paths that are newly installed or updated, installation
may print lines like:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
\-\- Installing: /some/destination/path
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
For paths that are already up to date, installation may print
lines like:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
\-\- Up\-to\-date: /some/destination/path
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
The \fBCMAKE_INSTALL_MESSAGE\fP variable may be set to control
which messages are printed:
.INDENT 0.0
.TP
.B \fBALWAYS\fP
Print both \fBInstalling\fP and \fBUp\-to\-date\fP messages.
.TP
.B \fBLAZY\fP
Print \fBInstalling\fP but not \fBUp\-to\-date\fP messages.
.TP
.B \fBNEVER\fP
Print neither \fBInstalling\fP nor \fBUp\-to\-date\fP messages.
.UNINDENT
.sp
Other values have undefined behavior and may not be diagnosed.
.sp
If this variable is not set, the default behavior is \fBALWAYS\fP\&.
.SS CMAKE_INSTALL_PREFIX
.sp
Install directory used by \fBinstall()\fP\&.
.sp
If \fBmake install\fP is invoked or \fBINSTALL\fP is built, this directory is
prepended onto all install directories.  This variable defaults to
\fB/usr/local\fP on UNIX and \fBc:/Program Files/${PROJECT_NAME}\fP on Windows.
See \fBCMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT\fP for how a
project might choose its own default.
.sp
On UNIX one can use the \fBDESTDIR\fP mechanism in order to relocate the
whole installation.  \fBDESTDIR\fP means DESTination DIRectory.  It is
commonly used by makefile users in order to install software at
non\-default location.  It is usually invoked like this:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
make DESTDIR=/home/john install
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
which will install the concerned software using the installation
prefix, e.g.  \fB/usr/local\fP prepended with the \fBDESTDIR\fP value which
finally gives \fB/home/john/usr/local\fP\&.
.sp
WARNING: \fBDESTDIR\fP may not be used on Windows because installation
prefix usually contains a drive letter like in \fBC:/Program Files\fP
which cannot be prepended with some other prefix.
.sp
The installation prefix is also added to \fBCMAKE_SYSTEM_PREFIX_PATH\fP
so that \fBfind_package()\fP, \fBfind_program()\fP,
\fBfind_library()\fP, \fBfind_path()\fP, and \fBfind_file()\fP
will search the prefix for other software.
.sp
\fBNOTE:\fP
.INDENT 0.0
.INDENT 3.5
Use the \fBGNUInstallDirs\fP module to provide GNU\-style
options for the layout of directories within the installation.
.UNINDENT
.UNINDENT
.SS CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT
.sp
CMake sets this variable to a \fBTRUE\fP value when the
\fBCMAKE_INSTALL_PREFIX\fP has just been initialized to
its default value, typically on the first run of CMake within
a new build tree.  This can be used by project code to change
the default without overriding a user\-provided value:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
  set(CMAKE_INSTALL_PREFIX "/my/default" CACHE PATH "..." FORCE)
endif()
.ft P
.fi
.UNINDENT
.UNINDENT
.SS CMAKE_LIBRARY_PATH
.sp
;\-list of directories specifying a search path
for the \fBfind_library()\fP command.  By default it is empty, it is
intended to be set by the project.  See also
\fBCMAKE_SYSTEM_LIBRARY_PATH\fP and \fBCMAKE_PREFIX_PATH\fP\&.
.SS CMAKE_MFC_FLAG
.sp
Tell cmake to use MFC for an executable or dll.
.sp
This can be set in a \fBCMakeLists.txt\fP file and will enable MFC in the
application.  It should be set to \fB1\fP for the static MFC library, and \fB2\fP
for the shared MFC library.  This is used in Visual Studio 7
project files.  The CMakeSetup dialog used MFC and the \fBCMakeLists.txt\fP
looks like this:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
add_definitions(\-D_AFXDLL)
set(CMAKE_MFC_FLAG 2)
add_executable(CMakeSetup WIN32 ${SRCS})
.ft P
.fi
.UNINDENT
.UNINDENT
.SS CMAKE_MODULE_PATH
.sp
;\-list of directories specifying a search path
for CMake modules to be loaded by the the \fBinclude()\fP or
\fBfind_package()\fP commands before checking the default modules that come
with CMake.  By default it is empty, it is intended to be set by the project.
.SS CMAKE_NOT_USING_CONFIG_FLAGS
.sp
Skip \fB_BUILD_TYPE\fP flags if true.
.sp
This is an internal flag used by the generators in CMake to tell CMake
to skip the \fB_BUILD_TYPE\fP flags.
.SS CMAKE_POLICY_DEFAULT_CMP<NNNN>
.sp
Default for CMake Policy \fBCMP<NNNN>\fP when it is otherwise left unset.
.sp
Commands \fBcmake_minimum_required(VERSION)\fP and
\fBcmake_policy(VERSION)\fP by default leave policies introduced after
the given version unset.  Set \fBCMAKE_POLICY_DEFAULT_CMP<NNNN>\fP to \fBOLD\fP
or \fBNEW\fP to specify the default for policy \fBCMP<NNNN>\fP, where \fB<NNNN>\fP
is the policy number.
.sp
This variable should not be set by a project in CMake code; use
\fBcmake_policy(SET)\fP instead.  Users running CMake may set this
variable in the cache (e.g. \fB\-DCMAKE_POLICY_DEFAULT_CMP<NNNN>=<OLD|NEW>\fP)
to set a policy not otherwise set by the project.  Set to \fBOLD\fP to quiet a
policy warning while using old behavior or to \fBNEW\fP to try building the
project with new behavior.
.SS CMAKE_POLICY_WARNING_CMP<NNNN>
.sp
Explicitly enable or disable the warning when CMake Policy \fBCMP<NNNN>\fP
is not set.  This is meaningful only for the few policies that do not
warn by default:
.INDENT 0.0
.IP \(bu 2
\fBCMAKE_POLICY_WARNING_CMP0025\fP controls the warning for
policy \fBCMP0025\fP\&.
.IP \(bu 2
\fBCMAKE_POLICY_WARNING_CMP0047\fP controls the warning for
policy \fBCMP0047\fP\&.
.IP \(bu 2
\fBCMAKE_POLICY_WARNING_CMP0056\fP controls the warning for
policy \fBCMP0056\fP\&.
.IP \(bu 2
\fBCMAKE_POLICY_WARNING_CMP0060\fP controls the warning for
policy \fBCMP0060\fP\&.
.IP \(bu 2
\fBCMAKE_POLICY_WARNING_CMP0065\fP controls the warning for
policy \fBCMP0065\fP\&.
.IP \(bu 2
\fBCMAKE_POLICY_WARNING_CMP0066\fP controls the warning for
policy \fBCMP0066\fP\&.
.IP \(bu 2
\fBCMAKE_POLICY_WARNING_CMP0067\fP controls the warning for
policy \fBCMP0067\fP\&.
.UNINDENT
.sp
This variable should not be set by a project in CMake code.  Project
developers running CMake may set this variable in their cache to
enable the warning (e.g. \fB\-DCMAKE_POLICY_WARNING_CMP<NNNN>=ON\fP).
Alternatively, running \fBcmake(1)\fP with the \fB\-\-debug\-output\fP,
\fB\-\-trace\fP, or \fB\-\-trace\-expand\fP option will also enable the warning.
.SS CMAKE_PREFIX_PATH
.sp
;\-list of directories specifying installation
\fIprefixes\fP to be searched by the \fBfind_package()\fP,
\fBfind_program()\fP, \fBfind_library()\fP, \fBfind_file()\fP, and
\fBfind_path()\fP commands.  Each command will add appropriate
subdirectories (like \fBbin\fP, \fBlib\fP, or \fBinclude\fP) as specified in its own
documentation.
.sp
By default this is empty.  It is intended to be set by the project.
.sp
See also \fBCMAKE_SYSTEM_PREFIX_PATH\fP, \fBCMAKE_INCLUDE_PATH\fP,
\fBCMAKE_LIBRARY_PATH\fP, \fBCMAKE_PROGRAM_PATH\fP, and
\fBCMAKE_IGNORE_PATH\fP\&.
.SS CMAKE_PROGRAM_PATH
.sp
;\-list of directories specifying a search path
for the \fBfind_program()\fP command.  By default it is empty, it is
intended to be set by the project.  See also
\fBCMAKE_SYSTEM_PROGRAM_PATH\fP and \fBCMAKE_PREFIX_PATH\fP\&.
.SS CMAKE_PROJECT_<PROJECT\-NAME>_INCLUDE
.sp
A CMake language file or module to be included by the \fBproject()\fP
command.  This is is intended for injecting custom code into project
builds without modifying their source.
.SS CMAKE_SKIP_INSTALL_ALL_DEPENDENCY
.sp
Don\(aqt make the \fBinstall\fP target depend on the \fBall\fP target.
.sp
By default, the \fBinstall\fP target depends on the \fBall\fP target.  This
has the effect, that when \fBmake install\fP is invoked or \fBINSTALL\fP is
built, first the \fBall\fP target is built, then the installation starts.
If \fI\%CMAKE_SKIP_INSTALL_ALL_DEPENDENCY\fP is set to \fBTRUE\fP, this
dependency is not created, so the installation process will start immediately,
independent from whether the project has been completely built or not.
.SS CMAKE_STAGING_PREFIX
.sp
This variable may be set to a path to install to when cross\-compiling. This can
be useful if the path in \fBCMAKE_SYSROOT\fP is read\-only, or otherwise
should remain pristine.
.sp
The \fBCMAKE_STAGING_PREFIX\fP location is also used as a search prefix by the
\fBfind_*\fP commands. This can be controlled by setting the
\fBCMAKE_FIND_NO_INSTALL_PREFIX\fP variable.
.sp
If any RPATH/RUNPATH entries passed to the linker contain the
\fBCMAKE_STAGING_PREFIX\fP, the matching path fragments are replaced with the
\fBCMAKE_INSTALL_PREFIX\fP\&.
.SS CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS
.sp
This variable contains a list of env vars as a list of tokens with the
syntax \fBvar=value\fP\&.
.sp
Example:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
set(CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS
   "FOO=FOO1\e;FOO2\e;FOON"
   "BAR=BAR1\e;BAR2\e;BARN"
   "BAZ=BAZ1\e;BAZ2\e;BAZN"
   "FOOBAR=FOOBAR1\e;FOOBAR2\e;FOOBARN"
   "VALID="
   )
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
In case of malformed variables CMake will fail:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
set(CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS
    "THIS_IS_NOT_VALID"
    )
.ft P
.fi
.UNINDENT
.UNINDENT
.SS CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE
.sp
If this variable evaluates to \fBON\fP at the end of the top\-level
\fBCMakeLists.txt\fP file, the \fBSublime Text 2\fP extra generator
excludes the build tree from the \fB\&.sublime\-project\fP if it is inside the
source tree.
.SS CMAKE_SYSTEM_APPBUNDLE_PATH
.sp
Search path for OS X application bundles used by the \fBfind_program()\fP,
and \fBfind_package()\fP commands.  By default it contains the standard
directories for the current system.  It is \fInot\fP intended to be modified by
the project, use \fBCMAKE_APPBUNDLE_PATH\fP for this.
.SS CMAKE_SYSTEM_FRAMEWORK_PATH
.sp
Search path for OS X frameworks used by the \fBfind_library()\fP,
\fBfind_package()\fP, \fBfind_path()\fP, and \fBfind_file()\fP
commands.  By default it contains the standard directories for the
current system.  It is \fInot\fP intended to be modified by the project,
use \fBCMAKE_FRAMEWORK_PATH\fP for this.
.SS CMAKE_SYSTEM_IGNORE_PATH
.sp
;\-list of directories to be \fIignored\fP by
the \fBfind_program()\fP, \fBfind_library()\fP, \fBfind_file()\fP,
and \fBfind_path()\fP commands.  This is useful in cross\-compiling
environments where some system directories contain incompatible but
possibly linkable libraries.  For example, on cross\-compiled cluster
environments, this allows a user to ignore directories containing
libraries meant for the front\-end machine.
.sp
By default this contains a list of directories containing incompatible
binaries for the host system.  See the \fBCMAKE_IGNORE_PATH\fP variable
that is intended to be set by the project.
.sp
See also the \fBCMAKE_SYSTEM_PREFIX_PATH\fP,
\fBCMAKE_SYSTEM_LIBRARY_PATH\fP, \fBCMAKE_SYSTEM_INCLUDE_PATH\fP,
and \fBCMAKE_SYSTEM_PROGRAM_PATH\fP variables.
.SS CMAKE_SYSTEM_INCLUDE_PATH
.sp
;\-list of directories specifying a search path
for the \fBfind_file()\fP and \fBfind_path()\fP commands.  By default
this contains the standard directories for the current system.  It is \fInot\fP
intended to be modified by the project; use \fBCMAKE_INCLUDE_PATH\fP for
this.  See also \fBCMAKE_SYSTEM_PREFIX_PATH\fP\&.
.SS CMAKE_SYSTEM_LIBRARY_PATH
.sp
;\-list of directories specifying a search path
for the \fBfind_library()\fP command.  By default this contains the
standard directories for the current system.  It is \fInot\fP intended to be
modified by the project; use \fBCMAKE_LIBRARY_PATH\fP for this.
See also \fBCMAKE_SYSTEM_PREFIX_PATH\fP\&.
.SS CMAKE_SYSTEM_PREFIX_PATH
.sp
;\-list of directories specifying installation
\fIprefixes\fP to be searched by the \fBfind_package()\fP,
\fBfind_program()\fP, \fBfind_library()\fP, \fBfind_file()\fP, and
\fBfind_path()\fP commands.  Each command will add appropriate
subdirectories (like \fBbin\fP, \fBlib\fP, or \fBinclude\fP) as specified in its own
documentation.
.sp
By default this contains the standard directories for the current system, the
\fBCMAKE_INSTALL_PREFIX\fP, and the \fBCMAKE_STAGING_PREFIX\fP\&.
It is \fInot\fP intended to be modified by the project; use
\fBCMAKE_PREFIX_PATH\fP for this.
.sp
See also \fBCMAKE_SYSTEM_INCLUDE_PATH\fP,
\fBCMAKE_SYSTEM_LIBRARY_PATH\fP, \fBCMAKE_SYSTEM_PROGRAM_PATH\fP,
and \fBCMAKE_SYSTEM_IGNORE_PATH\fP\&.
.SS CMAKE_SYSTEM_PROGRAM_PATH
.sp
;\-list of directories specifying a search path
for the \fBfind_program()\fP command.  By default this contains the
standard directories for the current system.  It is \fInot\fP intended to be
modified by the project; use \fBCMAKE_PROGRAM_PATH\fP for this.
See also \fBCMAKE_SYSTEM_PREFIX_PATH\fP\&.
.SS CMAKE_USER_MAKE_RULES_OVERRIDE
.sp
Specify a CMake file that overrides platform information.
.sp
CMake loads the specified file while enabling support for each
language from either the \fBproject()\fP or \fBenable_language()\fP
commands.  It is loaded after CMake\(aqs builtin compiler and platform information
modules have been loaded but before the information is used.  The file
may set platform information variables to override CMake\(aqs defaults.
.sp
This feature is intended for use only in overriding information
variables that must be set before CMake builds its first test project
to check that the compiler for a language works.  It should not be
used to load a file in cases that a normal \fBinclude()\fP will work.  Use
it only as a last resort for behavior that cannot be achieved any
other way.  For example, one may set the
\fBCMAKE_C_FLAGS_INIT\fP variable
to change the default value used to initialize the
\fBCMAKE_C_FLAGS\fP variable
before it is cached.  The override file should NOT be used to set anything
that could be set after languages are enabled, such as variables like
\fBCMAKE_RUNTIME_OUTPUT_DIRECTORY\fP that affect the placement of
binaries.  Information set in the file will be used for \fBtry_compile()\fP
and \fBtry_run()\fP builds too.
.SS CMAKE_WARN_DEPRECATED
.sp
Whether to issue warnings for deprecated functionality.
.sp
If not \fBFALSE\fP, use of deprecated functionality will issue warnings.
If this variable is not set, CMake behaves as if it were set to \fBTRUE\fP\&.
.sp
When running \fBcmake(1)\fP, this option can be enabled with the
\fB\-Wdeprecated\fP option, or disabled with the \fB\-Wno\-deprecated\fP option.
.SS CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION
.sp
Ask \fBcmake_install.cmake\fP script to warn each time a file with absolute
\fBINSTALL DESTINATION\fP is encountered.
.sp
This variable is used by CMake\-generated \fBcmake_install.cmake\fP scripts.
If one sets this variable to \fBON\fP while running the script, it may get
warning messages from the script.
.SH VARIABLES THAT DESCRIBE THE SYSTEM
.SS ANDROID
.sp
Set to \fB1\fP when the target system (\fBCMAKE_SYSTEM_NAME\fP) is
\fBAndroid\fP\&.
.SS APPLE
.sp
\fBTrue\fP if running on OS X.
.sp
Set to \fBtrue\fP on OS X.
.SS BORLAND
.sp
\fBTrue\fP if the Borland compiler is being used.
.sp
This is set to \fBtrue\fP if the Borland compiler is being used.
.SS CMAKE_CL_64
.sp
Discouraged.  Use \fBCMAKE_SIZEOF_VOID_P\fP instead.
.sp
Set to a true value when using a Microsoft Visual Studio \fBcl\fP compiler that
\fItargets\fP a 64\-bit architecture.
.SS CMAKE_COMPILER_2005
.sp
Using the Visual Studio 2005 compiler from Microsoft
.sp
Set to true when using the Visual Studio 2005 compiler from Microsoft.
.SS CMAKE_HOST_APPLE
.sp
\fBTrue\fP for Apple OS X operating systems.
.sp
Set to \fBtrue\fP when the host system is Apple OS X.
.SS CMAKE_HOST_SOLARIS
.sp
\fBTrue\fP for Oracle Solaris operating systems.
.sp
Set to \fBtrue\fP when the host system is Oracle Solaris.
.SS CMAKE_HOST_SYSTEM_NAME
.sp
Name of the OS CMake is running on.
.sp
On systems that have the uname command, this variable is set to the
output of \fBuname \-s\fP\&.  \fBLinux\fP, \fBWindows\fP, and \fBDarwin\fP for OS X
are the values found on the big three operating systems.
.SS CMAKE_HOST_SYSTEM_PROCESSOR
.sp
The name of the CPU CMake is running on.
.sp
On systems that support \fBuname\fP, this variable is set to the output of
\fBuname \-p\fP\&.  On Windows it is set to the value of the environment variable
\fBPROCESSOR_ARCHITECTURE\fP\&.
.SS CMAKE_HOST_SYSTEM
.sp
Composit Name of OS CMake is being run on.
.sp
This variable is the composite of \fBCMAKE_HOST_SYSTEM_NAME\fP and
\fBCMAKE_HOST_SYSTEM_VERSION\fP, e.g.
\fB${CMAKE_HOST_SYSTEM_NAME}\-${CMAKE_HOST_SYSTEM_VERSION}\fP\&.  If
\fBCMAKE_HOST_SYSTEM_VERSION\fP is not set, then this variable is
the same as \fBCMAKE_HOST_SYSTEM_NAME\fP\&.
.SS CMAKE_HOST_SYSTEM_VERSION
.sp
The OS version CMake is running on.
.sp
A numeric version string for the system.  On systems that support
\fBuname\fP, this variable is set to the output of \fBuname \-r\fP\&. On other
systems this is set to major\-minor version numbers.
.SS CMAKE_HOST_UNIX
.sp
\fBTrue\fP for UNIX and UNIX like operating systems.
.sp
Set to \fBtrue\fP when the host system is UNIX or UNIX like (i.e.  APPLE and
CYGWIN).
.SS CMAKE_HOST_WIN32
.sp
\fBTrue\fP on Windows systems, including Win64.
.sp
Set to \fBtrue\fP when the host system is Windows and on Cygwin.
.SS CMAKE_LIBRARY_ARCHITECTURE_REGEX
.sp
Regex matching possible target architecture library directory names.
.sp
This is used to detect \fBCMAKE_<LANG>_LIBRARY_ARCHITECTURE\fP from the
implicit linker search path by matching the \fB<arch>\fP name.
.SS CMAKE_LIBRARY_ARCHITECTURE
.sp
Target architecture library directory name, if detected.
.sp
This is the value of \fBCMAKE_<LANG>_LIBRARY_ARCHITECTURE\fP as detected
for one of the enabled languages.
.SS CMAKE_OBJECT_PATH_MAX
.sp
Maximum object file full\-path length allowed by native build tools.
.sp
CMake computes for every source file an object file name that is
unique to the source file and deterministic with respect to the full
path to the source file.  This allows multiple source files in a
target to share the same name if they lie in different directories
without rebuilding when one is added or removed.  However, it can
produce long full paths in a few cases, so CMake shortens the path
using a hashing scheme when the full path to an object file exceeds a
limit.  CMake has a built\-in limit for each platform that is
sufficient for common tools, but some native tools may have a lower
limit.  This variable may be set to specify the limit explicitly.  The
value must be an integer no less than 128.
.SS CMAKE_SYSTEM_NAME
.sp
The name of the operating system for which CMake is to build.
See the \fBCMAKE_SYSTEM_VERSION\fP variable for the OS version.
.SS System Name for Host Builds
.sp
\fBCMAKE_SYSTEM_NAME\fP is by default set to the same value as the
\fBCMAKE_HOST_SYSTEM_NAME\fP variable so that the build
targets the host system.
.SS System Name for Cross Compiling
.sp
\fBCMAKE_SYSTEM_NAME\fP may be set explicitly when first configuring a new build
tree in order to enable cross compiling\&.
In this case the \fBCMAKE_SYSTEM_VERSION\fP variable must also be
set explicitly.
.SS CMAKE_SYSTEM_PROCESSOR
.sp
The name of the CPU CMake is building for.
.sp
This variable is the same as \fBCMAKE_HOST_SYSTEM_PROCESSOR\fP if
you build for the host system instead of the target system when
cross compiling.
.INDENT 0.0
.IP \(bu 2
The \fBGreen Hills MULTI\fP generator sets this to \fBARM\fP by default.
.UNINDENT
.SS CMAKE_SYSTEM
.sp
Composite name of operating system CMake is compiling for.
.sp
This variable is the composite of \fBCMAKE_SYSTEM_NAME\fP and
\fBCMAKE_SYSTEM_VERSION\fP, e.g.
\fB${CMAKE_SYSTEM_NAME}\-${CMAKE_SYSTEM_VERSION}\fP\&.  If
\fBCMAKE_SYSTEM_VERSION\fP is not set, then this variable is
the same as \fBCMAKE_SYSTEM_NAME\fP\&.
.SS CMAKE_SYSTEM_VERSION
.sp
The version of the operating system for which CMake is to build.
See the \fBCMAKE_SYSTEM_NAME\fP variable for the OS name.
.SS System Version for Host Builds
.sp
When the \fBCMAKE_SYSTEM_NAME\fP variable takes its default value
then \fBCMAKE_SYSTEM_VERSION\fP is by default set to the same value as the
\fBCMAKE_HOST_SYSTEM_VERSION\fP variable so that the build targets
the host system version.
.sp
In the case of a host build then \fBCMAKE_SYSTEM_VERSION\fP may be set
explicitly when first configuring a new build tree in order to enable
targeting the build for a different version of the host operating system
than is actually running on the host.  This is allowed and not considered
cross compiling so long as the binaries built for the specified OS version
can still run on the host.
.SS System Version for Cross Compiling
.sp
When the \fBCMAKE_SYSTEM_NAME\fP variable is set explicitly to
enable cross compiling then the
value of \fBCMAKE_SYSTEM_VERSION\fP must also be set explicitly to specify
the target system version.
.SS CYGWIN
.sp
\fBTrue\fP for Cygwin.
.sp
Set to \fBtrue\fP when using Cygwin.
.SS ENV
.sp
Access environment variables.
.sp
Use the syntax \fB$ENV{VAR}\fP to read environment variable \fBVAR\fP\&.  See also
the \fBset()\fP command to set \fBENV{VAR}\fP\&.
.SS GHS\-MULTI
.sp
True when using Green Hills MULTI
.SS MINGW
.sp
\fBTrue\fP when using MinGW
.sp
Set to \fBtrue\fP when the compiler is some version of MinGW.
.SS MSVC10
.sp
Discouraged.  Use the \fBMSVC_VERSION\fP variable instead.
.sp
\fBTrue\fP when using the Microsoft Visual Studio \fBv100\fP toolset
(\fBcl\fP version 16) or another compiler that simulates it.
.SS MSVC11
.sp
Discouraged.  Use the \fBMSVC_VERSION\fP variable instead.
.sp
\fBTrue\fP when using the Microsoft Visual Studio \fBv110\fP toolset
(\fBcl\fP version 17) or another compiler that simulates it.
.SS MSVC12
.sp
Discouraged.  Use the \fBMSVC_VERSION\fP variable instead.
.sp
\fBTrue\fP when using the Microsoft Visual Studio \fBv120\fP toolset
(\fBcl\fP version 18) or another compiler that simulates it.
.SS MSVC14
.sp
Discouraged.  Use the \fBMSVC_VERSION\fP variable instead.
.sp
\fBTrue\fP when using the Microsoft Visual Studio \fBv140\fP or \fBv141\fP
toolset (\fBcl\fP version 19) or another compiler that simulates it.
.SS MSVC60
.sp
Discouraged.  Use the \fBMSVC_VERSION\fP variable instead.
.sp
\fBTrue\fP when using Microsoft Visual C++ 6.0.
.sp
Set to \fBtrue\fP when the compiler is version 6.0 of Microsoft Visual C++.
.SS MSVC70
.sp
Discouraged.  Use the \fBMSVC_VERSION\fP variable instead.
.sp
\fBTrue\fP when using Microsoft Visual C++ 7.0.
.sp
Set to \fBtrue\fP when the compiler is version 7.0 of Microsoft Visual C++.
.SS MSVC71
.sp
Discouraged.  Use the \fBMSVC_VERSION\fP variable instead.
.sp
\fBTrue\fP when using Microsoft Visual C++ 7.1.
.sp
Set to \fBtrue\fP when the compiler is version 7.1 of Microsoft Visual C++.
.SS MSVC80
.sp
Discouraged.  Use the \fBMSVC_VERSION\fP variable instead.
.sp
\fBTrue\fP when using the Microsoft Visual Studio \fBv80\fP toolset
(\fBcl\fP version 14) or another compiler that simulates it.
.SS MSVC90
.sp
Discouraged.  Use the \fBMSVC_VERSION\fP variable instead.
.sp
\fBTrue\fP when using the Microsoft Visual Studio \fBv90\fP toolset
(\fBcl\fP version 15) or another compiler that simulates it.
.SS MSVC_IDE
.sp
\fBTrue\fP when using the Microsoft Visual C++ IDE.
.sp
Set to \fBtrue\fP when the target platform is the Microsoft Visual C++ IDE, as
opposed to the command line compiler.
.SS MSVC
.sp
\fBTrue\fP when using Microsoft Visual C++.
.sp
Set to \fBtrue\fP when the compiler is some version of Microsoft Visual C++.
.sp
See also the \fBMSVC_VERSION\fP variable.
.SS MSVC_VERSION
.sp
The version of Microsoft Visual C/C++ being used if any.
.sp
Known version numbers are:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
1200 = VS  6.0
1300 = VS  7.0
1310 = VS  7.1
1400 = VS  8.0
1500 = VS  9.0
1600 = VS 10.0
1700 = VS 11.0
1800 = VS 12.0
1900 = VS 14.0
1910 = VS 15.0
.ft P
.fi
.UNINDENT
.UNINDENT
.SS UNIX
.sp
\fBTrue\fP for UNIX and UNIX like operating systems.
.sp
Set to \fBtrue\fP when the target system is UNIX or UNIX like (i.e.
\fBAPPLE\fP and \fBCYGWIN\fP).
.SS WIN32
.sp
\fBTrue\fP on Windows systems, including Win64.
.sp
Set to \fBtrue\fP when the target system is Windows.
.SS WINCE
.sp
True when the \fBCMAKE_SYSTEM_NAME\fP variable is set
to \fBWindowsCE\fP\&.
.SS WINDOWS_PHONE
.sp
True when the \fBCMAKE_SYSTEM_NAME\fP variable is set
to \fBWindowsPhone\fP\&.
.SS WINDOWS_STORE
.sp
True when the \fBCMAKE_SYSTEM_NAME\fP variable is set
to \fBWindowsStore\fP\&.
.SS XCODE
.sp
\fBTrue\fP when using \fBXcode\fP generator.
.SS XCODE_VERSION
.sp
Version of Xcode (\fBXcode\fP generator only).
.sp
Under the Xcode generator, this is the version of Xcode as specified
in \fBXcode.app/Contents/version.plist\fP (such as \fB3.1.2\fP).
.SH VARIABLES THAT CONTROL THE BUILD
.SS CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS
.sp
Default value for the \fBANDROID_ANT_ADDITIONAL_OPTIONS\fP target property.
See that target property for additional information.
.SS CMAKE_ANDROID_API
.sp
When Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
Edition, this variable may be set to specify the default value for the
\fBANDROID_API\fP target property.  See that target property for
additional information.
.sp
Otherwise, when Cross Compiling for Android, this variable provides
the Android API version number targeted.  This will be the same value as
the \fBCMAKE_SYSTEM_VERSION\fP variable for \fBAndroid\fP platforms.
.SS CMAKE_ANDROID_API_MIN
.sp
Default value for the \fBANDROID_API_MIN\fP target property.
See that target property for additional information.
.SS CMAKE_ANDROID_ARCH
.sp
When Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
Edition, this variable may be set to specify the default value for the
\fBANDROID_ARCH\fP target property.  See that target property for
additional information.
.sp
Otherwise, when Cross Compiling for Android, this variable provides
the name of the Android architecture corresponding to the value of the
\fBCMAKE_ANDROID_ARCH_ABI\fP variable.  The architecture name
may be one of:
.INDENT 0.0
.IP \(bu 2
\fBarm\fP
.IP \(bu 2
\fBarm64\fP
.IP \(bu 2
\fBmips\fP
.IP \(bu 2
\fBmips64\fP
.IP \(bu 2
\fBx86\fP
.IP \(bu 2
\fBx86_64\fP
.UNINDENT
.SS CMAKE_ANDROID_ARCH_ABI
.sp
When Cross Compiling for Android, this variable specifies the
target architecture and ABI to be used.  Valid values are:
.INDENT 0.0
.IP \(bu 2
\fBarm64\-v8a\fP
.IP \(bu 2
\fBarmeabi\-v7a\fP
.IP \(bu 2
\fBarmeabi\-v6\fP
.IP \(bu 2
\fBarmeabi\fP
.IP \(bu 2
\fBmips\fP
.IP \(bu 2
\fBmips64\fP
.IP \(bu 2
\fBx86\fP
.IP \(bu 2
\fBx86_64\fP
.UNINDENT
.sp
See also the \fBCMAKE_ANDROID_ARM_MODE\fP and
\fBCMAKE_ANDROID_ARM_NEON\fP variables.
.SS CMAKE_ANDROID_ARM_MODE
.sp
When Cross Compiling for Android and \fBCMAKE_ANDROID_ARCH_ABI\fP
is set to one of the \fBarmeabi\fP architectures, set \fBCMAKE_ANDROID_ARM_MODE\fP
to \fBON\fP to target 32\-bit ARM processors (\fB\-marm\fP).  Otherwise, the
default is to target the 16\-bit Thumb processors (\fB\-mthumb\fP).
.SS CMAKE_ANDROID_ARM_NEON
.sp
When Cross Compiling for Android and \fBCMAKE_ANDROID_ARCH_ABI\fP
is set to \fBarmeabi\-v7a\fP set \fBCMAKE_ANDROID_ARM_NEON\fP to \fBON\fP to target
ARM NEON devices.
.SS CMAKE_ANDROID_ASSETS_DIRECTORIES
.sp
Default value for the \fBANDROID_ASSETS_DIRECTORIES\fP target property.
See that target property for additional information.
.SS CMAKE_ANDROID_GUI
.sp
Default value for the \fBANDROID_GUI\fP target property of
executables.  See that target property for additional information.
.SS CMAKE_ANDROID_JAR_DEPENDENCIES
.sp
Default value for the \fBANDROID_JAR_DEPENDENCIES\fP target property.
See that target property for additional information.
.SS CMAKE_ANDROID_JAR_DIRECTORIES
.sp
Default value for the \fBANDROID_JAR_DIRECTORIES\fP target property.
See that target property for additional information.
.SS CMAKE_ANDROID_JAVA_SOURCE_DIR
.sp
Default value for the \fBANDROID_JAVA_SOURCE_DIR\fP target property.
See that target property for additional information.
.SS CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES
.sp
Default value for the \fBANDROID_NATIVE_LIB_DEPENDENCIES\fP target
property.  See that target property for additional information.
.SS CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES
.sp
Default value for the \fBANDROID_NATIVE_LIB_DIRECTORIES\fP target
property.  See that target property for additional information.
.SS CMAKE_ANDROID_NDK
.sp
When Cross Compiling for Android with the NDK, this variable holds
the absolute path to the root directory of the NDK.  The directory must
contain a \fBplatforms\fP subdirectory holding the \fBandroid\-<api>\fP
directories.
.SS CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG
.sp
When Cross Compiling for Android with the NDK, this variable
provides the NDK\(aqs "host tag" used to construct the path to prebuilt
toolchains that run on the host.
.SS CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION
.sp
When Cross Compiling for Android with the NDK, this variable
may be set to specify the version of the toolchain to be used
as the compiler.  The variable must be set to one of these forms:
.INDENT 0.0
.IP \(bu 2
\fB<major>.<minor>\fP: GCC of specified version
.IP \(bu 2
\fBclang<major>.<minor>\fP: Clang of specified version
.IP \(bu 2
\fBclang\fP: Clang of most recent available version
.UNINDENT
.sp
A toolchain of the requested version will be selected automatically to
match the ABI named in the \fBCMAKE_ANDROID_ARCH_ABI\fP variable.
.sp
If not specified, the default will be a value that selects the latest
available GCC toolchain.
.SS CMAKE_ANDROID_PROCESS_MAX
.sp
Default value for the \fBANDROID_PROCESS_MAX\fP target property.
See that target property for additional information.
.SS CMAKE_ANDROID_PROGUARD
.sp
Default value for the \fBANDROID_PROGUARD\fP target property.
See that target property for additional information.
.SS CMAKE_ANDROID_PROGUARD_CONFIG_PATH
.sp
Default value for the \fBANDROID_PROGUARD_CONFIG_PATH\fP target property.
See that target property for additional information.
.SS CMAKE_ANDROID_SECURE_PROPS_PATH
.sp
Default value for the \fBANDROID_SECURE_PROPS_PATH\fP target property.
See that target property for additional information.
.SS CMAKE_ANDROID_SKIP_ANT_STEP
.sp
Default value for the \fBANDROID_SKIP_ANT_STEP\fP target property.
See that target property for additional information.
.SS CMAKE_ANDROID_STANDALONE_TOOLCHAIN
.sp
When Cross Compiling for Android with a Standalone Toolchain, this
variable holds the absolute path to the root directory of the toolchain.
The specified directory must contain a \fBsysroot\fP subdirectory.
.SS CMAKE_ANDROID_STL_TYPE
.sp
When Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
Edition, this variable may be set to specify the default value for the
\fBANDROID_STL_TYPE\fP target property.  See that target property
for additional information.
.sp
When Cross Compiling for Android with the NDK, this variable may be
set to specify the STL variant to be used.  The value may be one of:
.INDENT 0.0
.TP
.B \fBnone\fP
No C++ Support
.TP
.B \fBsystem\fP
Minimal C++ without STL
.TP
.B \fBgabi++_static\fP
GAbi++ Static
.TP
.B \fBgabi++_shared\fP
GAbi++ Shared
.TP
.B \fBgnustl_static\fP
GNU libstdc++ Static
.TP
.B \fBgnustl_shared\fP
GNU libstdc++ Shared
.TP
.B \fBc++_static\fP
LLVM libc++ Static
.TP
.B \fBc++_shared\fP
LLVM libc++ Shared
.TP
.B \fBstlport_static\fP
STLport Static
.TP
.B \fBstlport_shared\fP
STLport Shared
.UNINDENT
.sp
The default value is \fBgnustl_static\fP\&.  Note that this default differs from
the native NDK build system because CMake may be used to build projects for
Android that are not natively implemented for it and use the C++ standard
library.
.SS CMAKE_ARCHIVE_OUTPUT_DIRECTORY
.sp
Where to put all the ARCHIVE
target files when built.
.sp
This variable is used to initialize the \fBARCHIVE_OUTPUT_DIRECTORY\fP
property on all the targets.  See that target property for additional
information.
.SS CMAKE_ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>
.sp
Where to put all the ARCHIVE
target files when built for a specific configuration.
.sp
This variable is used to initialize the
\fBARCHIVE_OUTPUT_DIRECTORY_<CONFIG>\fP property on all the targets.
See that target property for additional information.
.SS CMAKE_AUTOMOC_MOC_OPTIONS
.sp
Additional options for \fBmoc\fP when using \fBCMAKE_AUTOMOC\fP\&.
.sp
This variable is used to initialize the \fBAUTOMOC_MOC_OPTIONS\fP property
on all the targets.  See that target property for additional information.
.SS CMAKE_AUTOMOC
.sp
Whether to handle \fBmoc\fP automatically for Qt targets.
.sp
This variable is used to initialize the \fBAUTOMOC\fP property on all the
targets.  See that target property for additional information.
.SS CMAKE_AUTORCC
.sp
Whether to handle \fBrcc\fP automatically for Qt targets.
.sp
This variable is used to initialize the \fBAUTORCC\fP property on all
the targets.  See that target property for additional information.
.SS CMAKE_AUTORCC_OPTIONS
.sp
Whether to handle \fBrcc\fP automatically for Qt targets.
.sp
This variable is used to initialize the \fBAUTORCC_OPTIONS\fP property on
all the targets.  See that target property for additional information.
.SS CMAKE_AUTOUIC
.sp
Whether to handle \fBuic\fP automatically for Qt targets.
.sp
This variable is used to initialize the \fBAUTOUIC\fP property on all
the targets.  See that target property for additional information.
.SS CMAKE_AUTOUIC_OPTIONS
.sp
Whether to handle \fBuic\fP automatically for Qt targets.
.sp
This variable is used to initialize the \fBAUTOUIC_OPTIONS\fP property on
all the targets.  See that target property for additional information.
.SS CMAKE_BUILD_RPATH
.sp
A ;\-list specifying runtime path (\fBRPATH\fP)
entries to add to binaries linked in the build tree (for platforms that
support it).  The entries will \fInot\fP be used for binaries in the install
tree.  See also the \fBCMAKE_INSTALL_RPATH\fP variable.
.sp
This is used to initialize the \fBBUILD_RPATH\fP target property
for all targets.
.SS CMAKE_BUILD_WITH_INSTALL_RPATH
.sp
Use the install path for the \fBRPATH\fP\&.
.sp
Normally CMake uses the build tree for the \fBRPATH\fP when building
executables etc on systems that use \fBRPATH\fP\&.  When the software is
installed the executables etc are relinked by CMake to have the
install \fBRPATH\fP\&.  If this variable is set to true then the software is
always built with the install path for the \fBRPATH\fP and does not need to
be relinked when installed.
.SS CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY
.sp
Output directory for MS debug symbol \fB\&.pdb\fP files
generated by the compiler while building source files.
.sp
This variable is used to initialize the
\fBCOMPILE_PDB_OUTPUT_DIRECTORY\fP property on all the targets.
.SS CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_<CONFIG>
.sp
Per\-configuration output directory for MS debug symbol \fB\&.pdb\fP files
generated by the compiler while building source files.
.sp
This is a per\-configuration version of
\fBCMAKE_COMPILE_PDB_OUTPUT_DIRECTORY\fP\&.
This variable is used to initialize the
\fBCOMPILE_PDB_OUTPUT_DIRECTORY_<CONFIG>\fP
property on all the targets.
.SS CMAKE_<CONFIG>_POSTFIX
.sp
Default filename postfix for libraries under configuration \fB<CONFIG>\fP\&.
.sp
When a non\-executable target is created its \fB<CONFIG>_POSTFIX\fP
target property is initialized with the value of this variable if it is set.
.SS CMAKE_DEBUG_POSTFIX
.sp
See variable \fBCMAKE_<CONFIG>_POSTFIX\fP\&.
.sp
This variable is a special case of the more\-general
\fBCMAKE_<CONFIG>_POSTFIX\fP variable for the \fIDEBUG\fP configuration.
.SS CMAKE_ENABLE_EXPORTS
.sp
Specify whether an executable exports symbols for loadable modules.
.sp
Normally an executable does not export any symbols because it is the
final program.  It is possible for an executable to export symbols to
be used by loadable modules.  When this property is set to true CMake
will allow other targets to \fBlink\fP to the executable with the
\fBTARGET_LINK_LIBRARIES()\fP command.  On all platforms a target\-level
dependency on the executable is created for targets that link to it.
For DLL platforms an import library will be created for the exported
symbols and then used for linking.  All Windows\-based systems
including Cygwin are DLL platforms.  For non\-DLL platforms that
require all symbols to be resolved at link time, such as OS X, the
module will \fBlink\fP to the executable using a flag like
\fB\-bundle_loader\fP\&.  For other non\-DLL platforms the link rule is simply
ignored since the dynamic loader will automatically bind symbols when
the module is loaded.
.sp
This variable is used to initialize the target property
\fBENABLE_EXPORTS\fP for executable targets.
.SS CMAKE_EXE_LINKER_FLAGS_<CONFIG>
.sp
Flags to be used when linking an executable.
.sp
Same as \fBCMAKE_C_FLAGS_*\fP but used by the linker when creating
executables.
.SS CMAKE_EXE_LINKER_FLAGS_<CONFIG>_INIT
.sp
Value used to initialize the \fBCMAKE_EXE_LINKER_FLAGS_<CONFIG>\fP
cache entry the first time a build tree is configured.
This variable is meant to be set by a \fBtoolchain file\fP\&.  CMake may prepend or append content to
the value based on the environment and target platform.
.sp
See also \fBCMAKE_EXE_LINKER_FLAGS_INIT\fP\&.
.SS CMAKE_EXE_LINKER_FLAGS
.sp
Linker flags to be used to create executables.
.sp
These flags will be used by the linker when creating an executable.
.SS CMAKE_EXE_LINKER_FLAGS_INIT
.sp
Value used to initialize the \fBCMAKE_EXE_LINKER_FLAGS\fP
cache entry the first time a build tree is configured.
This variable is meant to be set by a \fBtoolchain file\fP\&.  CMake may prepend or append content to
the value based on the environment and target platform.
.sp
See also the configuration\-specific variable
\fBCMAKE_EXE_LINKER_FLAGS_<CONFIG>_INIT\fP\&.
.SS CMAKE_Fortran_FORMAT
.sp
Set to \fBFIXED\fP or \fBFREE\fP to indicate the Fortran source layout.
.sp
This variable is used to initialize the \fBFortran_FORMAT\fP property on
all the targets.  See that target property for additional information.
.SS CMAKE_Fortran_MODULE_DIRECTORY
.sp
Fortran module output directory.
.sp
This variable is used to initialize the \fBFortran_MODULE_DIRECTORY\fP
property on all the targets.  See that target property for additional
information.
.SS CMAKE_GNUtoMS
.sp
Convert GNU import libraries (\fB\&.dll.a\fP) to MS format (\fB\&.lib\fP).
.sp
This variable is used to initialize the \fBGNUtoMS\fP property on
targets when they are created.  See that target property for additional
information.
.SS CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE
.sp
Automatically add the current source\- and build directories to the
\fBINTERFACE_INCLUDE_DIRECTORIES\fP target property.
.sp
If this variable is enabled, CMake automatically adds for each shared
library target, static library target, module target and executable
target, \fBCMAKE_CURRENT_SOURCE_DIR\fP and
\fBCMAKE_CURRENT_BINARY_DIR\fP to
the \fBINTERFACE_INCLUDE_DIRECTORIES\fP target property.  By default
\fBCMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE\fP is \fBOFF\fP\&.
.SS CMAKE_INCLUDE_CURRENT_DIR
.sp
Automatically add the current source\- and build directories to the include path.
.sp
If this variable is enabled, CMake automatically adds
\fBCMAKE_CURRENT_SOURCE_DIR\fP and \fBCMAKE_CURRENT_BINARY_DIR\fP
to the include path for each directory.  These additional include
directories do not propagate down to subdirectories.  This is useful
mainly for out\-of\-source builds, where files generated into the build
tree are included by files located in the source tree.
.sp
By default \fBCMAKE_INCLUDE_CURRENT_DIR\fP is \fBOFF\fP\&.
.SS CMAKE_INSTALL_NAME_DIR
.sp
OS X directory name for installed targets.
.sp
\fBCMAKE_INSTALL_NAME_DIR\fP is used to initialize the
\fBINSTALL_NAME_DIR\fP property on all targets.  See that target
property for more information.
.SS CMAKE_INSTALL_RPATH
.sp
The rpath to use for installed targets.
.sp
A semicolon\-separated list specifying the rpath to use in installed
targets (for platforms that support it).  This is used to initialize
the target property \fBINSTALL_RPATH\fP for all targets.
.SS CMAKE_INSTALL_RPATH_USE_LINK_PATH
.sp
Add paths to linker search and installed rpath.
.sp
\fBCMAKE_INSTALL_RPATH_USE_LINK_PATH\fP is a boolean that if set to \fBtrue\fP
will append directories in the linker search path and outside the
project to the \fBINSTALL_RPATH\fP\&.  This is used to initialize the
target property \fBINSTALL_RPATH_USE_LINK_PATH\fP for all targets.
.SS CMAKE_IOS_INSTALL_COMBINED
.sp
Default value for \fBIOS_INSTALL_COMBINED\fP of targets.
.sp
This variable is used to initialize the \fBIOS_INSTALL_COMBINED\fP
property on all the targets.  See that target property for additional
information.
.SS CMAKE_<LANG>_CLANG_TIDY
.sp
Default value for \fB<LANG>_CLANG_TIDY\fP target property.
This variable is used to initialize the property on each target as it is
created.  This is done only when \fB<LANG>\fP is \fBC\fP or \fBCXX\fP\&.
.SS CMAKE_<LANG>_COMPILER_LAUNCHER
.sp
Default value for \fB<LANG>_COMPILER_LAUNCHER\fP target property.
This variable is used to initialize the property on each target as it is
created.  This is done only when \fB<LANG>\fP is \fBC\fP or \fBCXX\fP\&.
.SS CMAKE_<LANG>_CPPLINT
.sp
Default value for \fB<LANG>_CPPLINT\fP target property. This variable
is used to initialize the property on each target as it is created.  This
is done only when \fB<LANG>\fP is \fBC\fP or \fBCXX\fP\&.
.SS CMAKE_<LANG>_INCLUDE_WHAT_YOU_USE
.sp
Default value for \fB<LANG>_INCLUDE_WHAT_YOU_USE\fP target property.
This variable is used to initialize the property on each target as it is
created.  This is done only when \fB<LANG>\fP is \fBC\fP or \fBCXX\fP\&.
.SS CMAKE_<LANG>_VISIBILITY_PRESET
.sp
Default value for the \fB<LANG>_VISIBILITY_PRESET\fP target
property when a target is created.
.SS CMAKE_LIBRARY_OUTPUT_DIRECTORY
.sp
Where to put all the LIBRARY
target files when built.
.sp
This variable is used to initialize the \fBLIBRARY_OUTPUT_DIRECTORY\fP
property on all the targets.  See that target property for additional
information.
.SS CMAKE_LIBRARY_OUTPUT_DIRECTORY_<CONFIG>
.sp
Where to put all the LIBRARY
target files when built for a specific configuration.
.sp
This variable is used to initialize the
\fBLIBRARY_OUTPUT_DIRECTORY_<CONFIG>\fP property on all the targets.
See that target property for additional information.
.SS CMAKE_LIBRARY_PATH_FLAG
.sp
The flag to be used to add a library search path to a compiler.
.sp
The flag will be used to specify a library directory to the compiler.
On most compilers this is \fB\-L\fP\&.
.SS CMAKE_LINK_DEF_FILE_FLAG
.sp
Linker flag to be used to specify a \fB\&.def\fP file for dll creation.
.sp
The flag will be used to add a \fB\&.def\fP file when creating a dll on
Windows; this is only defined on Windows.
.SS CMAKE_LINK_DEPENDS_NO_SHARED
.sp
Whether to skip link dependencies on shared library files.
.sp
This variable initializes the \fBLINK_DEPENDS_NO_SHARED\fP property on
targets when they are created.  See that target property for
additional information.
.SS CMAKE_LINK_INTERFACE_LIBRARIES
.sp
Default value for \fBLINK_INTERFACE_LIBRARIES\fP of targets.
.sp
This variable is used to initialize the \fBLINK_INTERFACE_LIBRARIES\fP
property on all the targets.  See that target property for additional
information.
.SS CMAKE_LINK_LIBRARY_FILE_FLAG
.sp
Flag to be used to link a library specified by a path to its file.
.sp
The flag will be used before a library file path is given to the
linker.  This is needed only on very few platforms.
.SS CMAKE_LINK_LIBRARY_FLAG
.sp
Flag to be used to link a library into an executable.
.sp
The flag will be used to specify a library to link to an executable.
On most compilers this is \fB\-l\fP\&.
.SS CMAKE_LINK_WHAT_YOU_USE
.sp
Default value for \fBLINK_WHAT_YOU_USE\fP target property.
This variable is used to initialize the property on each target as it is
created.
.SS CMAKE_MACOSX_BUNDLE
.sp
Default value for \fBMACOSX_BUNDLE\fP of targets.
.sp
This variable is used to initialize the \fBMACOSX_BUNDLE\fP property on
all the targets.  See that target property for additional information.
.SS CMAKE_MACOSX_RPATH
.sp
Whether to use rpaths on OS X and iOS.
.sp
This variable is used to initialize the \fBMACOSX_RPATH\fP property on
all targets.
.SS CMAKE_MAP_IMPORTED_CONFIG_<CONFIG>
.sp
Default value for \fBMAP_IMPORTED_CONFIG_<CONFIG>\fP of targets.
.sp
This variable is used to initialize the
\fBMAP_IMPORTED_CONFIG_<CONFIG>\fP property on all the targets.  See
that target property for additional information.
.SS CMAKE_MODULE_LINKER_FLAGS_<CONFIG>
.sp
Flags to be used when linking a module.
.sp
Same as \fBCMAKE_C_FLAGS_*\fP but used by the linker when creating modules.
.SS CMAKE_MODULE_LINKER_FLAGS_<CONFIG>_INIT
.sp
Value used to initialize the \fBCMAKE_MODULE_LINKER_FLAGS_<CONFIG>\fP
cache entry the first time a build tree is configured.
This variable is meant to be set by a \fBtoolchain file\fP\&.  CMake may prepend or append content to
the value based on the environment and target platform.
.sp
See also \fBCMAKE_MODULE_LINKER_FLAGS_INIT\fP\&.
.SS CMAKE_MODULE_LINKER_FLAGS
.sp
Linker flags to be used to create modules.
.sp
These flags will be used by the linker when creating a module.
.SS CMAKE_MODULE_LINKER_FLAGS_INIT
.sp
Value used to initialize the \fBCMAKE_MODULE_LINKER_FLAGS\fP
cache entry the first time a build tree is configured.
This variable is meant to be set by a \fBtoolchain file\fP\&.  CMake may prepend or append content to
the value based on the environment and target platform.
.sp
See also the configuration\-specific variable
\fBCMAKE_MODULE_LINKER_FLAGS_<CONFIG>_INIT\fP\&.
.SS CMAKE_NINJA_OUTPUT_PATH_PREFIX
.sp
Set output files path prefix for the \fBNinja\fP generator.
.sp
Every output files listed in the generated \fBbuild.ninja\fP will be
prefixed by the contents of this variable (a trailing slash is
appended if missing).  This is useful when the generated ninja file is
meant to be embedded as a \fBsubninja\fP file into a \fIsuper\fP ninja
project.  For example, a ninja build file generated with a command
like:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
cd top\-build\-dir/sub &&
cmake \-G Ninja \-DCMAKE_NINJA_OUTPUT_PATH_PREFIX=sub/ path/to/source
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
can be embedded in \fBtop\-build\-dir/build.ninja\fP with a directive like
this:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
subninja sub/build.ninja
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
The \fBauto\-regeneration\fP rule in \fBtop\-build\-dir/build.ninja\fP must have an
order\-only dependency on \fBsub/build.ninja\fP\&.
.sp
\fBNOTE:\fP
.INDENT 0.0
.INDENT 3.5
When \fBCMAKE_NINJA_OUTPUT_PATH_PREFIX\fP is set, the project generated
by CMake cannot be used as a standalone project.  No default targets
are specified.
.UNINDENT
.UNINDENT
.SS CMAKE_NO_BUILTIN_CHRPATH
.sp
Do not use the builtin ELF editor to fix RPATHs on installation.
.sp
When an ELF binary needs to have a different RPATH after installation
than it does in the build tree, CMake uses a builtin editor to change
the RPATH in the installed copy.  If this variable is set to true then
CMake will relink the binary before installation instead of using its
builtin editor.
.SS CMAKE_NO_SYSTEM_FROM_IMPORTED
.sp
Default value for \fBNO_SYSTEM_FROM_IMPORTED\fP of targets.
.sp
This variable is used to initialize the \fBNO_SYSTEM_FROM_IMPORTED\fP
property on all the targets.  See that target property for additional
information.
.SS CMAKE_OSX_ARCHITECTURES
.sp
Target specific architectures for OS X and iOS.
.sp
This variable is used to initialize the \fBOSX_ARCHITECTURES\fP
property on each target as it is creaed.  See that target property
for additional information.
.sp
The value of this variable should be set prior to the first
\fBproject()\fP or \fBenable_language()\fP command invocation
because it may influence configuration of the toolchain and flags.
It is intended to be set locally by the user creating a build tree.
.sp
This variable is ignored on platforms other than OS X.
.SS CMAKE_OSX_DEPLOYMENT_TARGET
.sp
Specify the minimum version of OS X on which the target binaries are
to be deployed.  CMake uses this value for the \fB\-mmacosx\-version\-min\fP
flag and to help choose the default SDK
(see \fBCMAKE_OSX_SYSROOT\fP).
.sp
If not set explicitly the value is initialized by the
\fBMACOSX_DEPLOYMENT_TARGET\fP environment variable, if set,
and otherwise computed based on the host platform.
.sp
The value of this variable should be set prior to the first
\fBproject()\fP or \fBenable_language()\fP command invocation
because it may influence configuration of the toolchain and flags.
It is intended to be set locally by the user creating a build tree.
.sp
This variable is ignored on platforms other than OS X.
.SS CMAKE_OSX_SYSROOT
.sp
Specify the location or name of the OS X platform SDK to be used.
CMake uses this value to compute the value of the \fB\-isysroot\fP flag
or equivalent and to help the \fBfind_*\fP commands locate files in
the SDK.
.sp
If not set explicitly the value is initialized by the \fBSDKROOT\fP
environment variable, if set, and otherwise computed based on the
\fBCMAKE_OSX_DEPLOYMENT_TARGET\fP or the host platform.
.sp
The value of this variable should be set prior to the first
\fBproject()\fP or \fBenable_language()\fP command invocation
because it may influence configuration of the toolchain and flags.
It is intended to be set locally by the user creating a build tree.
.sp
This variable is ignored on platforms other than OS X.
.SS CMAKE_PDB_OUTPUT_DIRECTORY
.sp
Output directory for MS debug symbol \fB\&.pdb\fP files generated by the
linker for executable and shared library targets.
.sp
This variable is used to initialize the \fBPDB_OUTPUT_DIRECTORY\fP
property on all the targets.  See that target property for additional
information.
.SS CMAKE_PDB_OUTPUT_DIRECTORY_<CONFIG>
.sp
Per\-configuration output directory for MS debug symbol \fB\&.pdb\fP files
generated by the linker for executable and shared library targets.
.sp
This is a per\-configuration version of \fBCMAKE_PDB_OUTPUT_DIRECTORY\fP\&.
This variable is used to initialize the
\fBPDB_OUTPUT_DIRECTORY_<CONFIG>\fP
property on all the targets.  See that target property for additional
information.
.SS CMAKE_POSITION_INDEPENDENT_CODE
.sp
Default value for \fBPOSITION_INDEPENDENT_CODE\fP of targets.
.sp
This variable is used to initialize the
\fBPOSITION_INDEPENDENT_CODE\fP property on all the targets.
See that target property for additional information.  If set, it\(aqs
value is also used by the \fBtry_compile()\fP command.
.SS CMAKE_RUNTIME_OUTPUT_DIRECTORY
.sp
Where to put all the RUNTIME
target files when built.
.sp
This variable is used to initialize the \fBRUNTIME_OUTPUT_DIRECTORY\fP
property on all the targets.  See that target property for additional
information.
.SS CMAKE_RUNTIME_OUTPUT_DIRECTORY_<CONFIG>
.sp
Where to put all the RUNTIME
target files when built for a specific configuration.
.sp
This variable is used to initialize the
\fBRUNTIME_OUTPUT_DIRECTORY_<CONFIG>\fP property on all the targets.
See that target property for additional information.
.SS CMAKE_SHARED_LINKER_FLAGS_<CONFIG>
.sp
Flags to be used when linking a shared library.
.sp
Same as \fBCMAKE_C_FLAGS_*\fP but used by the linker when creating shared
libraries.
.SS CMAKE_SHARED_LINKER_FLAGS_<CONFIG>_INIT
.sp
Value used to initialize the \fBCMAKE_SHARED_LINKER_FLAGS_<CONFIG>\fP
cache entry the first time a build tree is configured.
This variable is meant to be set by a \fBtoolchain file\fP\&.  CMake may prepend or append content to
the value based on the environment and target platform.
.sp
See also \fBCMAKE_SHARED_LINKER_FLAGS_INIT\fP\&.
.SS CMAKE_SHARED_LINKER_FLAGS
.sp
Linker flags to be used to create shared libraries.
.sp
These flags will be used by the linker when creating a shared library.
.SS CMAKE_SHARED_LINKER_FLAGS_INIT
.sp
Value used to initialize the \fBCMAKE_SHARED_LINKER_FLAGS\fP
cache entry the first time a build tree is configured.
This variable is meant to be set by a \fBtoolchain file\fP\&.  CMake may prepend or append content to
the value based on the environment and target platform.
.sp
See also the configuration\-specific variable
\fBCMAKE_SHARED_LINKER_FLAGS_<CONFIG>_INIT\fP\&.
.SS CMAKE_SKIP_BUILD_RPATH
.sp
Do not include RPATHs in the build tree.
.sp
Normally CMake uses the build tree for the RPATH when building
executables etc on systems that use RPATH.  When the software is
installed the executables etc are relinked by CMake to have the
install RPATH.  If this variable is set to true then the software is
always built with no RPATH.
.SS CMAKE_SKIP_INSTALL_RPATH
.sp
Do not include RPATHs in the install tree.
.sp
Normally CMake uses the build tree for the RPATH when building
executables etc on systems that use RPATH.  When the software is
installed the executables etc are relinked by CMake to have the
install RPATH.  If this variable is set to true then the software is
always installed without RPATH, even if RPATH is enabled when
building.  This can be useful for example to allow running tests from
the build directory with RPATH enabled before the installation step.
To omit RPATH in both the build and install steps, use
\fBCMAKE_SKIP_RPATH\fP instead.
.SS CMAKE_STATIC_LINKER_FLAGS_<CONFIG>
.sp
Flags to be used when linking a static library.
.sp
Same as \fBCMAKE_C_FLAGS_*\fP but used by the linker when creating static
libraries.
.SS CMAKE_STATIC_LINKER_FLAGS_<CONFIG>_INIT
.sp
Value used to initialize the \fBCMAKE_STATIC_LINKER_FLAGS_<CONFIG>\fP
cache entry the first time a build tree is configured.
This variable is meant to be set by a \fBtoolchain file\fP\&.  CMake may prepend or append content to
the value based on the environment and target platform.
.sp
See also \fBCMAKE_STATIC_LINKER_FLAGS_INIT\fP\&.
.SS CMAKE_STATIC_LINKER_FLAGS
.sp
Linker flags to be used to create static libraries.
.sp
These flags will be used by the linker when creating a static library.
.SS CMAKE_STATIC_LINKER_FLAGS_INIT
.sp
Value used to initialize the \fBCMAKE_STATIC_LINKER_FLAGS\fP
cache entry the first time a build tree is configured.
This variable is meant to be set by a \fBtoolchain file\fP\&.  CMake may prepend or append content to
the value based on the environment and target platform.
.sp
See also the configuration\-specific variable
\fBCMAKE_STATIC_LINKER_FLAGS_<CONFIG>_INIT\fP\&.
.SS CMAKE_TRY_COMPILE_CONFIGURATION
.sp
Build configuration used for \fBtry_compile()\fP and \fBtry_run()\fP
projects.
.sp
Projects built by \fBtry_compile()\fP and \fBtry_run()\fP are built
synchronously during the CMake configuration step.  Therefore a specific build
configuration must be chosen even if the generated build system
supports multiple configurations.
.SS CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
.sp
List of variables that the \fBtry_compile()\fP command source file signature
must propagate into the test project in order to target the same platform as
the host project.
.sp
This variable should not be set by project code.  It is meant to be set by
CMake\(aqs platform information modules for the current toolchain, or by a
toolchain file when used with \fBCMAKE_TOOLCHAIN_FILE\fP\&.
.sp
Variables meaningful to CMake, such as \fBCMAKE_<LANG>_FLAGS\fP, are
propagated automatically.  The \fBCMAKE_TRY_COMPILE_PLATFORM_VARIABLES\fP
variable may be set to pass custom variables meaningful to a toolchain file.
For example, a toolchain file may contain:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
set(CMAKE_SYSTEM_NAME ...)
set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES MY_CUSTOM_VARIABLE)
# ... use MY_CUSTOM_VARIABLE ...
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
If a user passes \fB\-DMY_CUSTOM_VARIABLE=SomeValue\fP to CMake then this
setting will be made visible to the toolchain file both for the main
project and for test projects generated by the \fBtry_compile()\fP
command source file signature.
.SS CMAKE_TRY_COMPILE_TARGET_TYPE
.sp
Type of target generated for \fBtry_compile()\fP calls using the
source file signature.  Valid values are:
.INDENT 0.0
.TP
.B \fBEXECUTABLE\fP
Use \fBadd_executable()\fP to name the source file in the
generated project.  This is the default if no value is given.
.TP
.B \fBSTATIC_LIBRARY\fP
Use \fBadd_library()\fP with the \fBSTATIC\fP option to name the
source file in the generated project.  This avoids running the
linker and is intended for use with cross\-compiling toolchains
that cannot link without custom flags or linker scripts.
.UNINDENT
.SS CMAKE_USE_RELATIVE_PATHS
.sp
This variable has no effect.  The partially implemented effect it
had in previous releases was removed in CMake 3.4.
.SS CMAKE_VISIBILITY_INLINES_HIDDEN
.sp
Default value for the \fBVISIBILITY_INLINES_HIDDEN\fP target
property when a target is created.
.SS CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD
.sp
Include \fBINSTALL\fP target to default build.
.sp
In Visual Studio solution, by default the \fBINSTALL\fP target will not be part
of the default build. Setting this variable will enable the \fBINSTALL\fP target
to be part of the default build.
.SS CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD
.sp
Include \fBPACKAGE\fP target to default build.
.sp
In Visual Studio solution, by default the \fBPACKAGE\fP target will not be part
of the default build. Setting this variable will enable the \fBPACKAGE\fP target
to be part of the default build.
.SS CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS
.sp
Default value for \fBWINDOWS_EXPORT_ALL_SYMBOLS\fP target property.
This variable is used to initialize the property on each target as it is
created.
.SS CMAKE_WIN32_EXECUTABLE
.sp
Default value for \fBWIN32_EXECUTABLE\fP of targets.
.sp
This variable is used to initialize the \fBWIN32_EXECUTABLE\fP property
on all the targets.  See that target property for additional information.
.SS CMAKE_XCODE_ATTRIBUTE_<an\-attribute>
.sp
Set Xcode target attributes directly.
.sp
Tell the \fBXcode\fP generator to set \(aq<an\-attribute>\(aq to a given value
in the generated Xcode project.  Ignored on other generators.
.sp
See the \fBXCODE_ATTRIBUTE_<an\-attribute>\fP target property
to set attributes on a specific target.
.sp
Contents of \fBCMAKE_XCODE_ATTRIBUTE_<an\-attribute>\fP may use
"generator expressions" with the syntax \fB$<...>\fP\&.  See the
\fBcmake\-generator\-expressions(7)\fP manual for available
expressions.  See the \fBcmake\-buildsystem(7)\fP manual
for more on defining buildsystem properties.
.SS EXECUTABLE_OUTPUT_PATH
.sp
Old executable location variable.
.sp
The target property \fBRUNTIME_OUTPUT_DIRECTORY\fP supercedes this
variable for a target if it is set.  Executable targets are otherwise placed in
this directory.
.SS LIBRARY_OUTPUT_PATH
.sp
Old library location variable.
.sp
The target properties \fBARCHIVE_OUTPUT_DIRECTORY\fP,
\fBLIBRARY_OUTPUT_DIRECTORY\fP, and \fBRUNTIME_OUTPUT_DIRECTORY\fP
supercede this variable for a target if they are set.  Library targets are
otherwise placed in this directory.
.SH VARIABLES FOR LANGUAGES
.SS CMAKE_COMPILER_IS_GNUCC
.sp
True if the \fBC\fP compiler is GNU.
Use \fBCMAKE_C_COMPILER_ID\fP instead.
.SS CMAKE_COMPILER_IS_GNUCXX
.sp
True if the C++ (\fBCXX\fP) compiler is GNU.
Use \fBCMAKE_CXX_COMPILER_ID\fP instead.
.SS CMAKE_COMPILER_IS_GNUG77
.sp
True if the \fBFortran\fP compiler is GNU.
Use \fBCMAKE_Fortran_COMPILER_ID\fP instead.
.SS CMAKE_C_COMPILE_FEATURES
.sp
List of features known to the C compiler
.sp
These features are known to be available for use with the C compiler. This
list is a subset of the features listed in the
\fBCMAKE_C_KNOWN_FEATURES\fP global property.
.sp
See the \fBcmake\-compile\-features(7)\fP manual for information on
compile features and a list of supported compilers.
.SS CMAKE_C_EXTENSIONS
.sp
Default value for \fBC_EXTENSIONS\fP property of targets.
.sp
This variable is used to initialize the \fBC_EXTENSIONS\fP
property on all targets.  See that target property for additional
information.
.sp
See the \fBcmake\-compile\-features(7)\fP manual for information on
compile features and a list of supported compilers.
.SS CMAKE_C_STANDARD
.sp
Default value for \fBC_STANDARD\fP property of targets.
.sp
This variable is used to initialize the \fBC_STANDARD\fP
property on all targets.  See that target property for additional
information.
.sp
See the \fBcmake\-compile\-features(7)\fP manual for information on
compile features and a list of supported compilers.
.SS CMAKE_C_STANDARD_REQUIRED
.sp
Default value for \fBC_STANDARD_REQUIRED\fP property of targets.
.sp
This variable is used to initialize the \fBC_STANDARD_REQUIRED\fP
property on all targets.  See that target property for additional
information.
.sp
See the \fBcmake\-compile\-features(7)\fP manual for information on
compile features and a list of supported compilers.
.SS CMAKE_CUDA_EXTENSIONS
.sp
Default value for \fBCUDA_EXTENSIONS\fP property of targets.
.sp
This variable is used to initialize the \fBCUDA_EXTENSIONS\fP
property on all targets.  See that target property for additional
information.
.sp
See the \fBcmake\-compile\-features(7)\fP manual for information on
compile features and a list of supported compilers.
.SS CMAKE_CUDA_STANDARD
.sp
Default value for \fBCUDA_STANDARD\fP property of targets.
.sp
This variable is used to initialize the \fBCUDA_STANDARD\fP
property on all targets.  See that target property for additional
information.
.sp
See the \fBcmake\-compile\-features(7)\fP manual for information on
compile features and a list of supported compilers.
.SS CMAKE_CUDA_STANDARD_REQUIRED
.sp
Default value for \fBCUDA_STANDARD_REQUIRED\fP property of targets.
.sp
This variable is used to initialize the \fBCUDA_STANDARD_REQUIRED\fP
property on all targets.  See that target property for additional
information.
.sp
See the \fBcmake\-compile\-features(7)\fP manual for information on
compile features and a list of supported compilers.
.SS CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES
.sp
When the \fBCUDA\fP language has been enabled, this provides a
;\-list of include directories provided
by the CUDA Toolkit.  The value may be useful for C++ source files
to include CUDA headers.
.SS CMAKE_CXX_COMPILE_FEATURES
.sp
List of features known to the C++ compiler
.sp
These features are known to be available for use with the C++ compiler. This
list is a subset of the features listed in the
\fBCMAKE_CXX_KNOWN_FEATURES\fP global property.
.sp
See the \fBcmake\-compile\-features(7)\fP manual for information on
compile features and a list of supported compilers.
.SS CMAKE_CXX_EXTENSIONS
.sp
Default value for \fBCXX_EXTENSIONS\fP property of targets.
.sp
This variable is used to initialize the \fBCXX_EXTENSIONS\fP
property on all targets.  See that target property for additional
information.
.sp
See the \fBcmake\-compile\-features(7)\fP manual for information on
compile features and a list of supported compilers.
.SS CMAKE_CXX_STANDARD
.sp
Default value for \fBCXX_STANDARD\fP property of targets.
.sp
This variable is used to initialize the \fBCXX_STANDARD\fP
property on all targets.  See that target property for additional
information.
.sp
See the \fBcmake\-compile\-features(7)\fP manual for information on
compile features and a list of supported compilers.
.SS CMAKE_CXX_STANDARD_REQUIRED
.sp
Default value for \fBCXX_STANDARD_REQUIRED\fP property of targets.
.sp
This variable is used to initialize the \fBCXX_STANDARD_REQUIRED\fP
property on all targets.  See that target property for additional
information.
.sp
See the \fBcmake\-compile\-features(7)\fP manual for information on
compile features and a list of supported compilers.
.SS CMAKE_Fortran_MODDIR_DEFAULT
.sp
Fortran default module output directory.
.sp
Most Fortran compilers write \fB\&.mod\fP files to the current working
directory.  For those that do not, this is set to \fB\&.\fP and used when
the \fBFortran_MODULE_DIRECTORY\fP target property is not set.
.SS CMAKE_Fortran_MODDIR_FLAG
.sp
Fortran flag for module output directory.
.sp
This stores the flag needed to pass the value of the
\fBFortran_MODULE_DIRECTORY\fP target property to the compiler.
.SS CMAKE_Fortran_MODOUT_FLAG
.sp
Fortran flag to enable module output.
.sp
Most Fortran compilers write \fB\&.mod\fP files out by default.  For others,
this stores the flag needed to enable module output.
.SS CMAKE_INTERNAL_PLATFORM_ABI
.sp
An internal variable subject to change.
.sp
This is used in determining the compiler ABI and is subject to change.
.SS CMAKE_<LANG>_ANDROID_TOOLCHAIN_MACHINE
.sp
When Cross Compiling for Android this variable contains the
toolchain binutils machine name (e.g. \fBgcc \-dumpmachine\fP).  The
binutils typically have a \fB<machine>\-\fP prefix on their name.
.sp
See also \fBCMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX\fP
and \fBCMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX\fP\&.
.SS CMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX
.sp
When Cross Compiling for Android this variable contains the absolute
path prefixing the toolchain GNU compiler and its binutils.
.sp
See also \fBCMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX\fP
and \fBCMAKE_<LANG>_ANDROID_TOOLCHAIN_MACHINE\fP\&.
.sp
For example, the path to the linker is:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}ld${CMAKE_CXX_ANDROID_TOOLCHAIN_SUFFIX}
.ft P
.fi
.UNINDENT
.UNINDENT
.SS CMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX
.sp
When Cross Compiling for Android this variable contains the
host platform suffix of the toolchain GNU compiler and its binutils.
.sp
See also \fBCMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX\fP
and \fBCMAKE_<LANG>_ANDROID_TOOLCHAIN_MACHINE\fP\&.
.SS CMAKE_<LANG>_ARCHIVE_APPEND
.sp
Rule variable to append to a static archive.
.sp
This is a rule variable that tells CMake how to append to a static
archive.  It is used in place of \fBCMAKE_<LANG>_CREATE_STATIC_LIBRARY\fP
on some platforms in order to support large object counts.  See also
\fBCMAKE_<LANG>_ARCHIVE_CREATE\fP and
\fBCMAKE_<LANG>_ARCHIVE_FINISH\fP\&.
.SS CMAKE_<LANG>_ARCHIVE_CREATE
.sp
Rule variable to create a new static archive.
.sp
This is a rule variable that tells CMake how to create a static
archive.  It is used in place of \fBCMAKE_<LANG>_CREATE_STATIC_LIBRARY\fP
on some platforms in order to support large object counts.  See also
\fBCMAKE_<LANG>_ARCHIVE_APPEND\fP and
\fBCMAKE_<LANG>_ARCHIVE_FINISH\fP\&.
.SS CMAKE_<LANG>_ARCHIVE_FINISH
.sp
Rule variable to finish an existing static archive.
.sp
This is a rule variable that tells CMake how to finish a static
archive.  It is used in place of \fBCMAKE_<LANG>_CREATE_STATIC_LIBRARY\fP
on some platforms in order to support large object counts.  See also
\fBCMAKE_<LANG>_ARCHIVE_CREATE\fP and
\fBCMAKE_<LANG>_ARCHIVE_APPEND\fP\&.
.SS CMAKE_<LANG>_COMPILE_OBJECT
.sp
Rule variable to compile a single object file.
.sp
This is a rule variable that tells CMake how to compile a single
object file for the language \fB<LANG>\fP\&.
.SS CMAKE_<LANG>_COMPILER_ABI
.sp
An internal variable subject to change.
.sp
This is used in determining the compiler ABI and is subject to change.
.SS CMAKE_<LANG>_COMPILER_ID
.sp
Compiler identification string.
.sp
A short string unique to the compiler vendor.  Possible values
include:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
Absoft = Absoft Fortran (absoft.com)
ADSP = Analog VisualDSP++ (analog.com)
AppleClang = Apple Clang (apple.com)
ARMCC = ARM Compiler (arm.com)
Bruce = Bruce C Compiler
CCur = Concurrent Fortran (ccur.com)
Clang = LLVM Clang (clang.llvm.org)
Cray = Cray Compiler (cray.com)
Embarcadero, Borland = Embarcadero (embarcadero.com)
G95 = G95 Fortran (g95.org)
GNU = GNU Compiler Collection (gcc.gnu.org)
HP = Hewlett\-Packard Compiler (hp.com)
Intel = Intel Compiler (intel.com)
MIPSpro = SGI MIPSpro (sgi.com)
MSVC = Microsoft Visual Studio (microsoft.com)
NVIDIA = NVIDIA CUDA Compiler (nvidia.com)
OpenWatcom = Open Watcom (openwatcom.org)
PGI = The Portland Group (pgroup.com)
PathScale = PathScale (pathscale.com)
SDCC = Small Device C Compiler (sdcc.sourceforge.net)
SunPro = Oracle Solaris Studio (oracle.com)
TI = Texas Instruments (ti.com)
TinyCC = Tiny C Compiler (tinycc.org)
XL, VisualAge, zOS = IBM XL (ibm.com)
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
This variable is not guaranteed to be defined for all compilers or
languages.
.SS CMAKE_<LANG>_COMPILER_LOADED
.sp
Defined to true if the language is enabled.
.sp
When language \fB<LANG>\fP is enabled by \fBproject()\fP or
\fBenable_language()\fP this variable is defined to \fB1\fP\&.
.SS CMAKE_<LANG>_COMPILER
.sp
The full path to the compiler for \fBLANG\fP\&.
.sp
This is the command that will be used as the \fB<LANG>\fP compiler.  Once
set, you can not change this variable.
.SS CMAKE_<LANG>_COMPILER_EXTERNAL_TOOLCHAIN
.sp
The external toolchain for cross\-compiling, if supported.
.sp
Some compiler toolchains do not ship their own auxiliary utilities such as
archivers and linkers.  The compiler driver may support a command\-line argument
to specify the location of such tools.
\fBCMAKE_<LANG>_COMPILER_EXTERNAL_TOOLCHAIN\fP may be set to a path to a path to
the external toolchain and will be passed to the compiler driver if supported.
.sp
This variable may only be set in a toolchain file specified by
the \fBCMAKE_TOOLCHAIN_FILE\fP variable.
.SS CMAKE_<LANG>_COMPILER_TARGET
.sp
The target for cross\-compiling, if supported.
.sp
Some compiler drivers are inherently cross\-compilers, such as clang and
QNX qcc. These compiler drivers support a command\-line argument to specify
the target to cross\-compile for.
.sp
This variable may only be set in a toolchain file specified by
the \fBCMAKE_TOOLCHAIN_FILE\fP variable.
.SS CMAKE_<LANG>_COMPILER_VERSION
.sp
Compiler version string.
.sp
Compiler version in major[.minor[.patch[.tweak]]] format.  This
variable is not guaranteed to be defined for all compilers or
languages.
.SS CMAKE_<LANG>_CREATE_SHARED_LIBRARY
.sp
Rule variable to create a shared library.
.sp
This is a rule variable that tells CMake how to create a shared
library for the language \fB<LANG>\fP\&.
.SS CMAKE_<LANG>_CREATE_SHARED_MODULE
.sp
Rule variable to create a shared module.
.sp
This is a rule variable that tells CMake how to create a shared
library for the language \fB<LANG>\fP\&.
.SS CMAKE_<LANG>_CREATE_STATIC_LIBRARY
.sp
Rule variable to create a static library.
.sp
This is a rule variable that tells CMake how to create a static
library for the language \fB<LANG>\fP\&.
.SS CMAKE_<LANG>_FLAGS_DEBUG
.sp
Flags for \fBDebug\fP build type or configuration.
.sp
\fB<LANG>\fP flags used when \fBCMAKE_BUILD_TYPE\fP is \fBDebug\fP\&.
.SS CMAKE_<LANG>_FLAGS_DEBUG_INIT
.sp
Value used to initialize the \fBCMAKE_<LANG>_FLAGS_DEBUG\fP cache
entry the first time a build tree is configured for language \fB<LANG>\fP\&.
This variable is meant to be set by a \fBtoolchain file\fP\&.  CMake may prepend or append content to
the value based on the environment and target platform.
.sp
See also \fBCMAKE_<LANG>_FLAGS_INIT\fP\&.
.SS CMAKE_<LANG>_FLAGS_MINSIZEREL
.sp
Flags for \fBMinSizeRel\fP build type or configuration.
.sp
\fB<LANG>\fP flags used when \fBCMAKE_BUILD_TYPE\fP is \fBMinSizeRel\fP
(short for minimum size release).
.SS CMAKE_<LANG>_FLAGS_MINSIZEREL_INIT
.sp
Value used to initialize the \fBCMAKE_<LANG>_FLAGS_MINSIZEREL\fP
cache entry the first time a build tree is configured for language \fB<LANG>\fP\&.
This variable is meant to be set by a \fBtoolchain file\fP\&.  CMake may prepend or append content to
the value based on the environment and target platform.
.sp
See also \fBCMAKE_<LANG>_FLAGS_INIT\fP\&.
.SS CMAKE_<LANG>_FLAGS_RELEASE
.sp
Flags for \fBRelease\fP build type or configuration.
.sp
\fB<LANG>\fP flags used when \fBCMAKE_BUILD_TYPE\fP is \fBRelease\fP\&.
.SS CMAKE_<LANG>_FLAGS_RELEASE_INIT
.sp
Value used to initialize the \fBCMAKE_<LANG>_FLAGS_RELEASE\fP
cache entry the first time a build tree is configured for language \fB<LANG>\fP\&.
This variable is meant to be set by a \fBtoolchain file\fP\&.  CMake may prepend or append content to
the value based on the environment and target platform.
.sp
See also \fBCMAKE_<LANG>_FLAGS_INIT\fP\&.
.SS CMAKE_<LANG>_FLAGS_RELWITHDEBINFO
.sp
Flags for \fBRelWithDebInfo\fP type or configuration.
.sp
\fB<LANG>\fP flags used when \fBCMAKE_BUILD_TYPE\fP is \fBRelWithDebInfo\fP
(short for Release With Debug Information).
.SS CMAKE_<LANG>_FLAGS_RELWITHDEBINFO_INIT
.sp
Value used to initialize the \fBCMAKE_<LANG>_FLAGS_RELWITHDEBINFO\fP
cache entry the first time a build tree is configured for language \fB<LANG>\fP\&.
This variable is meant to be set by a \fBtoolchain file\fP\&.  CMake may prepend or append content to
the value based on the environment and target platform.
.sp
See also \fBCMAKE_<LANG>_FLAGS_INIT\fP\&.
.SS CMAKE_<LANG>_FLAGS
.sp
Flags for all build types.
.sp
\fB<LANG>\fP flags used regardless of the value of \fBCMAKE_BUILD_TYPE\fP\&.
.SS CMAKE_<LANG>_FLAGS_INIT
.sp
Value used to initialize the \fBCMAKE_<LANG>_FLAGS\fP cache entry
the first time a build tree is configured for language \fB<LANG>\fP\&.
This variable is meant to be set by a \fBtoolchain file\fP\&.  CMake may prepend or append content to
the value based on the environment and target platform.
.sp
See also the configuration\-specific variables:
.INDENT 0.0
.IP \(bu 2
\fBCMAKE_<LANG>_FLAGS_DEBUG_INIT\fP
.IP \(bu 2
\fBCMAKE_<LANG>_FLAGS_RELEASE_INIT\fP
.IP \(bu 2
\fBCMAKE_<LANG>_FLAGS_MINSIZEREL_INIT\fP
.IP \(bu 2
\fBCMAKE_<LANG>_FLAGS_RELWITHDEBINFO_INIT\fP
.UNINDENT
.SS CMAKE_<LANG>_GHS_KERNEL_FLAGS_DEBUG
.sp
GHS kernel flags for \fBDebug\fP build type or configuration.
.sp
\fB<LANG>\fP flags used when \fBCMAKE_BUILD_TYPE\fP is \fBDebug\fP\&.
.SS CMAKE_<LANG>_GHS_KERNEL_FLAGS_MINSIZEREL
.sp
GHS kernel flags for \fBMinSizeRel\fP build type or configuration.
.sp
\fB<LANG>\fP flags used when \fBCMAKE_BUILD_TYPE\fP is \fBMinSizeRel\fP
(short for minimum size release).
.SS CMAKE_<LANG>_GHS_KERNEL_FLAGS_RELEASE
.sp
GHS kernel flags for \fBRelease\fP build type or configuration.
.sp
\fB<LANG>\fP flags used when \fBCMAKE_BUILD_TYPE\fP is \fBRelease\fP\&.
.SS CMAKE_<LANG>_GHS_KERNEL_FLAGS_RELWITHDEBINFO
.sp
GHS kernel flags for \fBRelWithDebInfo\fP type or configuration.
.sp
\fB<LANG>\fP flags used when \fBCMAKE_BUILD_TYPE\fP is \fBRelWithDebInfo\fP
(short for Release With Debug Information).
.SS CMAKE_<LANG>_IGNORE_EXTENSIONS
.sp
File extensions that should be ignored by the build.
.sp
This is a list of file extensions that may be part of a project for a
given language but are not compiled.
.SS CMAKE_<LANG>_IMPLICIT_INCLUDE_DIRECTORIES
.sp
Directories implicitly searched by the compiler for header files.
.sp
CMake does not explicitly specify these directories on compiler
command lines for language \fB<LANG>\fP\&.  This prevents system include
directories from being treated as user include directories on some
compilers.
.SS CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES
.sp
Implicit linker search path detected for language \fB<LANG>\fP\&.
.sp
Compilers typically pass directories containing language runtime
libraries and default library search paths when they invoke a linker.
These paths are implicit linker search directories for the compiler\(aqs
language.  CMake automatically detects these directories for each
language and reports the results in this variable.
.sp
When a library in one of these directories is given by full path to
\fBtarget_link_libraries()\fP CMake will generate the \fB\-l<name>\fP form on
link lines to ensure the linker searches its implicit directories for the
library.  Note that some toolchains read implicit directories from an
environment variable such as \fBLIBRARY_PATH\fP so keep its value consistent
when operating in a given build tree.
.SS CMAKE_<LANG>_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES
.sp
Implicit linker framework search path detected for language \fB<LANG>\fP\&.
.sp
These paths are implicit linker framework search directories for the
compiler\(aqs language.  CMake automatically detects these directories
for each language and reports the results in this variable.
.SS CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES
.sp
Implicit link libraries and flags detected for language \fB<LANG>\fP\&.
.sp
Compilers typically pass language runtime library names and other
flags when they invoke a linker.  These flags are implicit link
options for the compiler\(aqs language.  CMake automatically detects
these libraries and flags for each language and reports the results in
this variable.
.SS CMAKE_<LANG>_LIBRARY_ARCHITECTURE
.sp
Target architecture library directory name detected for \fB<LANG>\fP\&.
.sp
If the \fB<LANG>\fP compiler passes to the linker an architecture\-specific
system library search directory such as \fB<prefix>/lib/<arch>\fP this
variable contains the \fB<arch>\fP name if/as detected by CMake.
.SS CMAKE_<LANG>_LINKER_PREFERENCE_PROPAGATES
.sp
True if \fBCMAKE_<LANG>_LINKER_PREFERENCE\fP propagates across targets.
.sp
This is used when CMake selects a linker language for a target.
Languages compiled directly into the target are always considered.  A
language compiled into static libraries linked by the target is
considered if this variable is true.
.SS CMAKE_<LANG>_LINKER_PREFERENCE
.sp
Preference value for linker language selection.
.sp
The "linker language" for executable, shared library, and module
targets is the language whose compiler will invoke the linker.  The
\fBLINKER_LANGUAGE\fP target property sets the language explicitly.
Otherwise, the linker language is that whose linker preference value
is highest among languages compiled and linked into the target.  See
also the \fBCMAKE_<LANG>_LINKER_PREFERENCE_PROPAGATES\fP variable.
.SS CMAKE_<LANG>_LINK_EXECUTABLE
.sp
Rule variable to link an executable.
.sp
Rule variable to link an executable for the given language.
.SS CMAKE_<LANG>_OUTPUT_EXTENSION
.sp
Extension for the output of a compile for a single file.
.sp
This is the extension for an object file for the given \fB<LANG>\fP\&.  For
example \fB\&.obj\fP for C on Windows.
.SS CMAKE_<LANG>_PLATFORM_ID
.sp
An internal variable subject to change.
.sp
This is used in determining the platform and is subject to change.
.SS CMAKE_<LANG>_SIMULATE_ID
.sp
Identification string of "simulated" compiler.
.sp
Some compilers simulate other compilers to serve as drop\-in
replacements.  When CMake detects such a compiler it sets this
variable to what would have been the \fBCMAKE_<LANG>_COMPILER_ID\fP for
the simulated compiler.
.SS CMAKE_<LANG>_SIMULATE_VERSION
.sp
Version string of "simulated" compiler.
.sp
Some compilers simulate other compilers to serve as drop\-in
replacements.  When CMake detects such a compiler it sets this
variable to what would have been the \fBCMAKE_<LANG>_COMPILER_VERSION\fP
for the simulated compiler.
.SS CMAKE_<LANG>_SIZEOF_DATA_PTR
.sp
Size of pointer\-to\-data types for language \fB<LANG>\fP\&.
.sp
This holds the size (in bytes) of pointer\-to\-data types in the target
platform ABI.  It is defined for languages \fBC\fP and \fBCXX\fP (C++).
.SS CMAKE_<LANG>_SOURCE_FILE_EXTENSIONS
.sp
Extensions of source files for the given language.
.sp
This is the list of extensions for a given language\(aqs source files.
.SS CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES
.sp
Include directories to be used for every source file compiled with
the \fB<LANG>\fP compiler.  This is meant for specification of system
include directories needed by the language for the current platform.
The directories always appear at the end of the include path passed
to the compiler.
.sp
This variable should not be set by project code.  It is meant to be set by
CMake\(aqs platform information modules for the current toolchain, or by a
toolchain file when used with \fBCMAKE_TOOLCHAIN_FILE\fP\&.
.sp
See also \fBCMAKE_<LANG>_STANDARD_LIBRARIES\fP\&.
.SS CMAKE_<LANG>_STANDARD_LIBRARIES
.sp
Libraries linked into every executable and shared library linked
for language \fB<LANG>\fP\&.  This is meant for specification of system
libraries needed by the language for the current platform.
.sp
This variable should not be set by project code.  It is meant to be set by
CMake\(aqs platform information modules for the current toolchain, or by a
toolchain file when used with \fBCMAKE_TOOLCHAIN_FILE\fP\&.
.sp
See also \fBCMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES\fP\&.
.SS CMAKE_Swift_LANGUAGE_VERSION
.sp
Set to the Swift language version number.  If not set, the legacy "2.3"
version is assumed.
.SS CMAKE_USER_MAKE_RULES_OVERRIDE_<LANG>
.sp
Specify a CMake file that overrides platform information for \fB<LANG>\fP\&.
.sp
This is a language\-specific version of
\fBCMAKE_USER_MAKE_RULES_OVERRIDE\fP loaded only when enabling language
\fB<LANG>\fP\&.
.SH VARIABLES FOR CTEST
.SS CTEST_BINARY_DIRECTORY
.sp
Specify the CTest \fBBuildDirectory\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_BUILD_COMMAND
.sp
Specify the CTest \fBMakeCommand\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_BUILD_NAME
.sp
Specify the CTest \fBBuildName\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_BZR_COMMAND
.sp
Specify the CTest \fBBZRCommand\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_BZR_UPDATE_OPTIONS
.sp
Specify the CTest \fBBZRUpdateOptions\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_CHANGE_ID
.sp
Specify the CTest \fBChangeId\fP setting
in a \fBctest(1)\fP dashboard client script.
.sp
This setting allows CTest to pass arbitrary information about this
build up to CDash.  One use of this feature is to allow CDash to
post comments on your pull request if anything goes wrong with your build.
.SS CTEST_CHECKOUT_COMMAND
.sp
Tell the \fBctest_start()\fP command how to checkout or initialize
the source directory in a \fBctest(1)\fP dashboard client script.
.SS CTEST_CONFIGURATION_TYPE
.sp
Specify the CTest \fBDefaultCTestConfigurationType\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_CONFIGURE_COMMAND
.sp
Specify the CTest \fBConfigureCommand\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_COVERAGE_COMMAND
.sp
Specify the CTest \fBCoverageCommand\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS Cobertura
.sp
Using \fI\%Cobertura\fP as the coverage generation within your multi\-module
Java project can generate a series of XML files.
.sp
The Cobertura Coverage parser expects to read the coverage data from a
single XML file which contains the coverage data for all modules.
Cobertura has a program with the ability to merge given \fBcobertura.ser\fP files
and then another program to generate a combined XML file from the previous
merged file.  For command line testing, this can be done by hand prior to
CTest looking for the coverage files. For script builds,
set the \fBCTEST_COVERAGE_COMMAND\fP variable to point to a file which will
perform these same steps, such as a \fB\&.sh\fP or \fB\&.bat\fP file.
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
set(CTEST_COVERAGE_COMMAND .../run\-coverage\-and\-consolidate.sh)
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
where the \fBrun\-coverage\-and\-consolidate.sh\fP script is perhaps created by
the \fBconfigure_file()\fP command and might contain the following code:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
#!/usr/bin/env bash
CoberturaFiles="$(find "/path/to/source" \-name "cobertura.ser")"
SourceDirs="$(find "/path/to/source" \-name "java" \-type d)"
cobertura\-merge \-\-datafile coberturamerge.ser $CoberturaFiles
cobertura\-report \-\-datafile coberturamerge.ser \-\-destination . \e
                 \-\-format xml $SourceDirs
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
The script uses \fBfind\fP to capture the paths to all of the \fBcobertura.ser\fP
files found below the project\(aqs source directory.  It keeps the list of files
and supplies it as an argument to the \fBcobertura\-merge\fP program. The
\fB\-\-datafile\fP argument signifies where the result of the merge will be kept.
.sp
The combined \fBcoberturamerge.ser\fP file is then used to generate the XML report
using the \fBcobertura\-report\fP program.  The call to the cobertura\-report
program requires some named arguments.
.INDENT 0.0
.TP
.B \fB\-\-datafila\fP
path to the merged \fB\&.ser\fP file
.TP
.B \fB\-\-destination\fP
path to put the output files(s)
.TP
.B \fB\-\-format\fP
file format to write output in: xml or html
.UNINDENT
.sp
The rest of the supplied arguments consist of the full paths to the
\fB/src/main/java\fP directories of each module within the source tree. These
directories are needed and should not be forgotten.
.SS CTEST_COVERAGE_EXTRA_FLAGS
.sp
Specify the CTest \fBCoverageExtraFlags\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_CURL_OPTIONS
.sp
Specify the CTest \fBCurlOptions\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_CUSTOM_COVERAGE_EXCLUDE
.sp
A list of regular expressions which will be used to exclude files by their
path from coverage output by the \fBctest_coverage()\fP command.
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CUSTOM_ERROR_EXCEPTION
.sp
A list of regular expressions which will be used to exclude when detecting
error messages in build outputs by the \fBctest_test()\fP command.
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CUSTOM_ERROR_MATCH
.sp
A list of regular expressions which will be used to detect error messages in
build outputs by the \fBctest_test()\fP command.
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CUSTOM_ERROR_POST_CONTEXT
.sp
The number of lines to include as context which follow an error message by the
\fBctest_test()\fP command. The default is 10.
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CUSTOM_ERROR_PRE_CONTEXT
.sp
The number of lines to include as context which precede an error message by
the \fBctest_test()\fP command. The default is 10.
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE
.sp
When saving a failing test\(aqs output, this is the maximum size, in bytes, that
will be collected by the \fBctest_test()\fP command. Defaults to 307200
(300 KiB).
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS
.sp
The maximum number of errors in a single build step which will be detected.
After this, the \fBctest_test()\fP command will truncate the output.
Defaults to 50.
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS
.sp
The maximum number of warnings in a single build step which will be detected.
After this, the \fBctest_test()\fP command will truncate the output.
Defaults to 50.
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE
.sp
When saving a passing test\(aqs output, this is the maximum size, in bytes, that
will be collected by the \fBctest_test()\fP command. Defaults to 1024
(1 KiB).
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CUSTOM_MEMCHECK_IGNORE
.sp
A list of regular expressions to use to exclude tests during the
\fBctest_memcheck()\fP command.
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CUSTOM_POST_MEMCHECK
.sp
A list of commands to run at the end of the \fBctest_memcheck()\fP command.
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CUSTOM_POST_TEST
.sp
A list of commands to run at the end of the \fBctest_test()\fP command.
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CUSTOM_PRE_MEMCHECK
.sp
A list of commands to run at the start of the \fBctest_memcheck()\fP
command.
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CUSTOM_PRE_TEST
.sp
A list of commands to run at the start of the \fBctest_test()\fP command.
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CUSTOM_TEST_IGNORE
.sp
A list of regular expressions to use to exclude tests during the
\fBctest_test()\fP command.
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CUSTOM_WARNING_EXCEPTION
.sp
A list of regular expressions which will be used to exclude when detecting
warning messages in build outputs by the \fBctest_test()\fP command.
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CUSTOM_WARNING_MATCH
.sp
A list of regular expressions which will be used to detect warning messages in
build outputs by the \fBctest_test()\fP command.
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_CVS_CHECKOUT
.sp
Deprecated.  Use \fBCTEST_CHECKOUT_COMMAND\fP instead.
.SS CTEST_CVS_COMMAND
.sp
Specify the CTest \fBCVSCommand\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_CVS_UPDATE_OPTIONS
.sp
Specify the CTest \fBCVSUpdateOptions\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_DROP_LOCATION
.sp
Specify the CTest \fBDropLocation\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_DROP_METHOD
.sp
Specify the CTest \fBDropMethod\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_DROP_SITE
.sp
Specify the CTest \fBDropSite\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_DROP_SITE_CDASH
.sp
Specify the CTest \fBIsCDash\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_DROP_SITE_PASSWORD
.sp
Specify the CTest \fBDropSitePassword\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_DROP_SITE_USER
.sp
Specify the CTest \fBDropSiteUser\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_EXTRA_COVERAGE_GLOB
.sp
A list of regular expressions which will be used to find files which should be
covered by the \fBctest_coverage()\fP command.
.sp
It is initialized by \fBctest(1)\fP, but may be edited in a \fBCTestCustom\fP
file. See \fBctest_read_custom_files()\fP documentation.
.SS CTEST_GIT_COMMAND
.sp
Specify the CTest \fBGITCommand\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_GIT_INIT_SUBMODULES
.sp
Specify the CTest \fBGITInitSubmodules\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_GIT_UPDATE_CUSTOM
.sp
Specify the CTest \fBGITUpdateCustom\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_GIT_UPDATE_OPTIONS
.sp
Specify the CTest \fBGITUpdateOptions\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_HG_COMMAND
.sp
Specify the CTest \fBHGCommand\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_HG_UPDATE_OPTIONS
.sp
Specify the CTest \fBHGUpdateOptions\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_MEMORYCHECK_COMMAND
.sp
Specify the CTest \fBMemoryCheckCommand\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_MEMORYCHECK_COMMAND_OPTIONS
.sp
Specify the CTest \fBMemoryCheckCommandOptions\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_MEMORYCHECK_SANITIZER_OPTIONS
.sp
Specify the CTest \fBMemoryCheckSanitizerOptions\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_MEMORYCHECK_SUPPRESSIONS_FILE
.sp
Specify the CTest \fBMemoryCheckSuppressionFile\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_MEMORYCHECK_TYPE
.sp
Specify the CTest \fBMemoryCheckType\fP setting
in a \fBctest(1)\fP dashboard client script.
Valid values are \fBValgrind\fP, \fBPurify\fP, \fBBoundsChecker\fP, and
\fBThreadSanitizer\fP, \fBAddressSanitizer\fP, \fBLeakSanitizer\fP, \fBMemorySanitizer\fP, and
\fBUndefinedBehaviorSanitizer\fP\&.
.SS CTEST_NIGHTLY_START_TIME
.sp
Specify the CTest \fBNightlyStartTime\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_P4_CLIENT
.sp
Specify the CTest \fBP4Client\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_P4_COMMAND
.sp
Specify the CTest \fBP4Command\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_P4_OPTIONS
.sp
Specify the CTest \fBP4Options\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_P4_UPDATE_OPTIONS
.sp
Specify the CTest \fBP4UpdateOptions\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_SCP_COMMAND
.sp
Specify the CTest \fBSCPCommand\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_SITE
.sp
Specify the CTest \fBSite\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_SOURCE_DIRECTORY
.sp
Specify the CTest \fBSourceDirectory\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_SVN_COMMAND
.sp
Specify the CTest \fBSVNCommand\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_SVN_OPTIONS
.sp
Specify the CTest \fBSVNOptions\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_SVN_UPDATE_OPTIONS
.sp
Specify the CTest \fBSVNUpdateOptions\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_TEST_LOAD
.sp
Specify the \fBTestLoad\fP setting in the CTest Test Step
of a \fBctest(1)\fP dashboard client script.  This sets the
default value for the \fBTEST_LOAD\fP option of the \fBctest_test()\fP
command.
.SS CTEST_TEST_TIMEOUT
.sp
Specify the CTest \fBTimeOut\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_TRIGGER_SITE
.sp
Specify the CTest \fBTriggerSite\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_UPDATE_COMMAND
.sp
Specify the CTest \fBUpdateCommand\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_UPDATE_OPTIONS
.sp
Specify the CTest \fBUpdateOptions\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_UPDATE_VERSION_ONLY
.sp
Specify the CTest \fBUpdateVersionOnly\fP setting
in a \fBctest(1)\fP dashboard client script.
.SS CTEST_USE_LAUNCHERS
.sp
Specify the CTest \fBUseLaunchers\fP setting
in a \fBctest(1)\fP dashboard client script.
.SH VARIABLES FOR CPACK
.SS CPACK_ABSOLUTE_DESTINATION_FILES
.sp
List of files which have been installed using an \fBABSOLUTE DESTINATION\fP path.
.sp
This variable is a Read\-Only variable which is set internally by CPack
during installation and before packaging using
\fBCMAKE_ABSOLUTE_DESTINATION_FILES\fP defined in \fBcmake_install.cmake\fP
scripts.  The value can be used within CPack project configuration
file and/or \fBCPack<GEN>.cmake\fP file of \fB<GEN>\fP generator.
.SS CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY
.sp
Boolean toggle to include/exclude top level directory (component case).
.sp
Similar usage as \fBCPACK_INCLUDE_TOPLEVEL_DIRECTORY\fP but for the
component case.  See \fBCPACK_INCLUDE_TOPLEVEL_DIRECTORY\fP
documentation for the detail.
.SS CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION
.sp
Ask CPack to error out as soon as a file with absolute \fBINSTALL DESTINATION\fP
is encountered.
.sp
The fatal error is emitted before the installation of the offending
file takes place.  Some CPack generators, like NSIS, enforce this
internally.  This variable triggers the definition
of \fBCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION\fP when CPack
runs.
.SS CPACK_INCLUDE_TOPLEVEL_DIRECTORY
.sp
Boolean toggle to include/exclude top level directory.
.sp
When preparing a package CPack installs the item under the so\-called
top level directory.  The purpose of is to include (set to \fB1\fP or \fBON\fP or
\fBTRUE\fP) the top level directory in the package or not (set to \fB0\fP or
\fBOFF\fP or \fBFALSE\fP).
.sp
Each CPack generator has a built\-in default value for this variable.
E.g.  Archive generators (ZIP, TGZ, ...) includes the top level
whereas RPM or DEB don\(aqt.  The user may override the default value by
setting this variable.
.sp
There is a similar variable
\fBCPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY\fP which may be used
to override the behavior for the component packaging
case which may have different default value for historical (now
backward compatibility) reason.
.SS CPACK_INSTALL_SCRIPT
.sp
Extra CMake script provided by the user.
.sp
If set this CMake script will be executed by CPack during its local
[CPack\-private] installation which is done right before packaging the
files.  The script is not called by e.g.: \fBmake install\fP\&.
.SS CPACK_PACKAGING_INSTALL_PREFIX
.sp
The prefix used in the built package.
.sp
Each CPack generator has a default value (like \fB/usr\fP).  This default
value may be overwritten from the \fBCMakeLists.txt\fP or the \fBcpack(1)\fP
command line by setting an alternative value.  Example:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
set(CPACK_PACKAGING_INSTALL_PREFIX "/opt")
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
This is not the same purpose as \fBCMAKE_INSTALL_PREFIX\fP which is used
when installing from the build tree without building a package.
.SS CPACK_SET_DESTDIR
.sp
Boolean toggle to make CPack use \fBDESTDIR\fP mechanism when packaging.
.sp
\fBDESTDIR\fP means DESTination DIRectory.  It is commonly used by makefile
users in order to install software at non\-default location.  It is a
basic relocation mechanism that should not be used on Windows (see
\fBCMAKE_INSTALL_PREFIX\fP documentation).  It is usually invoked like
this:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
make DESTDIR=/home/john install
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
which will install the concerned software using the installation
prefix, e.g. \fB/usr/local\fP prepended with the \fBDESTDIR\fP value which
finally gives \fB/home/john/usr/local\fP\&.  When preparing a package, CPack
first installs the items to be packaged in a local (to the build tree)
directory by using the same \fBDESTDIR\fP mechanism.  Nevertheless, if
\fBCPACK_SET_DESTDIR\fP is set then CPack will set \fBDESTDIR\fP before doing the
local install.  The most noticeable difference is that without
\fBCPACK_SET_DESTDIR\fP, CPack uses \fBCPACK_PACKAGING_INSTALL_PREFIX\fP
as a prefix whereas with \fBCPACK_SET_DESTDIR\fP set, CPack will use
\fBCMAKE_INSTALL_PREFIX\fP as a prefix.
.sp
Manually setting \fBCPACK_SET_DESTDIR\fP may help (or simply be necessary)
if some install rules uses absolute \fBDESTINATION\fP (see CMake
\fBinstall()\fP command).  However, starting with CPack/CMake 2.8.3 RPM
and DEB installers tries to handle \fBDESTDIR\fP automatically so that it is
seldom necessary for the user to set it.
.SS CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION
.sp
Ask CPack to warn each time a file with absolute \fBINSTALL DESTINATION\fP is
encountered.
.sp
This variable triggers the definition of
\fBCMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION\fP when CPack runs
\fBcmake_install.cmake\fP scripts.
.SH COPYRIGHT
2000-2017 Kitware, Inc. and Contributors
.\" Generated by docutils manpage writer.
.
