|
|
|
add_executable
|
|
|
|
--------------
|
|
|
|
|
|
|
|
.. only:: html
|
|
|
|
|
|
|
|
.. contents::
|
|
|
|
|
|
|
|
Add an executable to the project using the specified source files.
|
|
|
|
|
|
|
|
Normal Executables
|
|
|
|
^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.. signature::
|
|
|
|
add_executable(<name> <options>... <sources>...)
|
|
|
|
:target: normal
|
|
|
|
|
|
|
|
Add an executable target called ``<name>`` to be built from the source
|
|
|
|
files listed in the command invocation.
|
|
|
|
|
|
|
|
The options are:
|
|
|
|
|
|
|
|
``WIN32``
|
|
|
|
Set the :prop_tgt:`WIN32_EXECUTABLE` target property automatically.
|
|
|
|
See documentation of that target property for details.
|
|
|
|
|
|
|
|
``MACOSX_BUNDLE``
|
|
|
|
Set the :prop_tgt:`MACOSX_BUNDLE` target property automatically.
|
|
|
|
See documentation of that target property for details.
|
|
|
|
|
|
|
|
``EXCLUDE_FROM_ALL``
|
|
|
|
Set the :prop_tgt:`EXCLUDE_FROM_ALL` target property automatically.
|
|
|
|
See documentation of that target property for details.
|
|
|
|
|
|
|
|
The ``<name>`` corresponds to the logical target name and must be globally
|
|
|
|
unique within a project. The actual file name of the executable built is
|
|
|
|
constructed based on conventions of the native platform (such as
|
|
|
|
``<name>.exe`` or just ``<name>``).
|
|
|
|
|
|
|
|
.. versionadded:: 3.1
|
|
|
|
Source arguments to ``add_executable`` may use "generator expressions" with
|
|
|
|
the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`
|
|
|
|
manual for available expressions.
|
|
|
|
|
|
|
|
.. versionadded:: 3.11
|
|
|
|
The source files can be omitted if they are added later using
|
|
|
|
:command:`target_sources`.
|
|
|
|
|
|
|
|
By default the executable file will be created in the build tree
|
|
|
|
directory corresponding to the source tree directory in which the
|
|
|
|
command was invoked. See documentation of the
|
|
|
|
:prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` target property to change this
|
|
|
|
location. See documentation of the :prop_tgt:`OUTPUT_NAME` target property
|
|
|
|
to change the ``<name>`` part of the final file name.
|
|
|
|
|
|
|
|
See the :manual:`cmake-buildsystem(7)` manual for more on defining
|
|
|
|
buildsystem properties.
|
|
|
|
|
|
|
|
See also :prop_sf:`HEADER_FILE_ONLY` on what to do if some sources are
|
|
|
|
pre-processed, and you want to have the original sources reachable from
|
|
|
|
within IDE.
|
|
|
|
|
|
|
|
Imported Executables
|
|
|
|
^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.. signature::
|
|
|
|
add_executable(<name> IMPORTED [GLOBAL])
|
|
|
|
:target: IMPORTED
|
|
|
|
|
|
|
|
Add an :ref:`IMPORTED executable target <Imported Targets>` to reference
|
|
|
|
an executable file located outside the project. The target name may be
|
|
|
|
referenced like any target built within the project, except that by
|
|
|
|
default it is visible only in the directory in which it is created,
|
|
|
|
and below.
|
|
|
|
|
|
|
|
The options are:
|
|
|
|
|
|
|
|
``GLOBAL``
|
|
|
|
Make the target name globally visible.
|
|
|
|
|
|
|
|
No rules are generated to build imported targets, and the :prop_tgt:`IMPORTED`
|
|
|
|
target property is ``True``. Imported executables are useful for convenient
|
|
|
|
reference from commands like :command:`add_custom_command`.
|
|
|
|
|
|
|
|
Details about the imported executable are specified by setting properties
|
|
|
|
whose names begin in ``IMPORTED_``. The most important such property is
|
|
|
|
:prop_tgt:`IMPORTED_LOCATION` (and its per-configuration version
|
|
|
|
:prop_tgt:`IMPORTED_LOCATION_<CONFIG>`) which specifies the location of
|
|
|
|
the main executable file on disk. See documentation of the ``IMPORTED_*``
|
|
|
|
properties for more information.
|
|
|
|
|
|
|
|
Alias Executables
|
|
|
|
^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.. signature::
|
|
|
|
add_executable(<name> ALIAS <target>)
|
|
|
|
:target: ALIAS
|
|
|
|
|
|
|
|
Creates an :ref:`Alias Target <Alias Targets>`, such that ``<name>`` can
|
|
|
|
be used to refer to ``<target>`` in subsequent commands. The ``<name>``
|
|
|
|
does not appear in the generated buildsystem as a make target. The
|
|
|
|
``<target>`` may not be an ``ALIAS``.
|
|
|
|
|
|
|
|
.. versionadded:: 3.11
|
|
|
|
An ``ALIAS`` can target a ``GLOBAL`` :ref:`Imported Target <Imported Targets>`
|
|
|
|
|
|
|
|
.. versionadded:: 3.18
|
|
|
|
An ``ALIAS`` can target a non-``GLOBAL`` Imported Target. Such alias is
|
|
|
|
scoped to the directory in which it is created and subdirectories.
|
|
|
|
The :prop_tgt:`ALIAS_GLOBAL` target property can be used to check if the
|
|
|
|
alias is global or not.
|
|
|
|
|
|
|
|
``ALIAS`` targets can be used as targets to read properties
|
|
|
|
from, executables for custom commands and custom targets. They can also be
|
|
|
|
tested for existence with the regular :command:`if(TARGET)` subcommand.
|
|
|
|
The ``<name>`` may not be used to modify properties of ``<target>``, that
|
|
|
|
is, it may not be used as the operand of :command:`set_property`,
|
|
|
|
:command:`set_target_properties`, :command:`target_link_libraries` etc.
|
|
|
|
An ``ALIAS`` target may not be installed or exported.
|
|
|
|
|
|
|
|
See Also
|
|
|
|
^^^^^^^^
|
|
|
|
|
|
|
|
* :command:`add_library`
|