``-C <initial-cache>``
 Pre-load a script to populate the cache.

 When cmake is first run in an empty build tree, it creates a
 CMakeCache.txt file and populates it with customizable settings for
 the project.  This option may be used to specify a file from which
 to load cache entries before the first pass through the project's
 cmake listfiles.  The loaded entries take priority over the
 project's default values.  The given file should be a CMake script
 containing SET commands that use the CACHE option, not a
 cache-format file.

``-D <var>:<type>=<value>, -D <var>=<value>``
 Create a cmake cache entry.

 When cmake is first run in an empty build tree, it creates a
 CMakeCache.txt file and populates it with customizable settings for
 the project.  This option may be used to specify a setting that
 takes priority over the project's default value.  The option may be
 repeated for as many cache entries as desired.

 If the ``:<type>`` portion is given it must be one of the types
 specified by the :command:`set` command documentation for its
 ``CACHE`` signature.
 If the ``:<type>`` portion is omitted the entry will be created
 with no type if it does not exist with a type already.  If a
 command in the project sets the type to ``PATH`` or ``FILEPATH``
 then the ``<value>`` will be converted to an absolute path.

 This option may also be given as a single argument:
 ``-D<var>:<type>=<value>`` or ``-D<var>=<value>``.

``-U <globbing_expr>``
 Remove matching entries from CMake cache.

 This option may be used to remove one or more variables from the
 CMakeCache.txt file, globbing expressions using * and ? are
 supported.  The option may be repeated for as many cache entries as
 desired.

 Use with care, you can make your CMakeCache.txt non-working.

``-G <generator-name>``
 Specify a build system generator.

 CMake may support multiple native build systems on certain
 platforms.  A generator is responsible for generating a particular
 build system.  Possible generator names are specified in the
 :manual:`cmake-generators(7)` manual.

``-T <toolset-name>``
 Specify toolset name if supported by generator.

 Some CMake generators support a toolset name to be given to the
 native build system to choose a compiler.  This is supported only on
 specific generators:

 ::

   Visual Studio >= 10
   Xcode >= 3.0

 See native build system documentation for allowed toolset names.

``-A <platform-name>``
 Specify platform name if supported by generator.

 Some CMake generators support a platform name to be given to the
 native build system to choose a compiler or SDK.  This is supported only on
 specific generators::

   Visual Studio >= 8

 See native build system documentation for allowed platform names.

``-Wno-dev``
 Suppress developer warnings.

 Suppress warnings that are meant for the author of the
 CMakeLists.txt files. By default this will also turn off
 deprecation warnings.

``-Wdev``
 Enable developer warnings.

 Enable warnings that are meant for the author of the CMakeLists.txt
 files. By default this will also turn on deprecation warnings.

``-Werror=dev``
 Make developer warnings errors.

 Make warnings that are meant for the author of the CMakeLists.txt files
 errors. By default this will also turn on deprecated warnings as errors.

``-Wno-error=dev``
 Make developer warnings not errors.

 Make warnings that are meant for the author of the CMakeLists.txt files not
 errors. By default this will also turn off deprecated warnings as errors.

``-Wdeprecated``
 Enable deprecated functionality warnings.

 Enable warnings for usage of deprecated functionality, that are meant
 for the author of the CMakeLists.txt files.

``-Wno-deprecated``
 Suppress deprecated functionality warnings.

 Suppress warnings for usage of deprecated functionality, that are meant
 for the author of the CMakeLists.txt files.

``-Werror=deprecated``
 Make deprecated macro and function warnings errors.

 Make warnings for usage of deprecated macros and functions, that are meant
 for the author of the CMakeLists.txt files, errors.

``-Wno-error=deprecated``
 Make deprecated macro and function warnings not errors.

 Make warnings for usage of deprecated macros and functions, that are meant
 for the author of the CMakeLists.txt files, not errors.
