``-S <path-to-source>``
 Path to root directory of the CMake project to build.

``-B <path-to-build>``
 Path to directory which CMake will use as the root of build directory.

 If the directory doesn't already exist CMake will make it.

``-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 or update 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-spec>``
 Toolset specification for the generator, if supported.

 Some CMake generators support a toolset specification to tell
 the native build system how to choose a compiler.  See the
 :variable:`CMAKE_GENERATOR_TOOLSET` variable for details.

``-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.  See the
 :variable:`CMAKE_GENERATOR_PLATFORM` variable for details.

``-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.
