123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- add_custom_target
- -----------------
- Add a target with no output so it will always be built.
- .. code-block:: cmake
- add_custom_target(Name [ALL] [command1 [args1...]]
- [COMMAND command2 [args2...] ...]
- [DEPENDS depend depend depend ...]
- [BYPRODUCTS [files...]]
- [WORKING_DIRECTORY dir]
- [COMMENT comment]
- [JOB_POOL job_pool]
- [JOB_SERVER_AWARE <bool>]
- [VERBATIM] [USES_TERMINAL]
- [COMMAND_EXPAND_LISTS]
- [SOURCES src1 [src2...]])
- Adds a target with the given name that executes the given commands.
- The target has no output file and is *always considered out of date*
- even if the commands try to create a file with the name of the target.
- Use the :command:`add_custom_command` command to generate a file with
- dependencies. By default nothing depends on the custom target. Use
- the :command:`add_dependencies` command to add dependencies to or
- from other targets.
- The options are:
- ``ALL``
- Indicate that this target should be added to the default build
- target so that it will be run every time (the command cannot be
- called ``ALL``).
- ``BYPRODUCTS``
- .. versionadded:: 3.2
- Specify the files the command is expected to produce but whose
- modification time may or may not be updated on subsequent builds.
- If a byproduct name is a relative path it will be interpreted
- relative to the build tree directory corresponding to the
- current source directory.
- Each byproduct file will be marked with the :prop_sf:`GENERATED`
- source file property automatically.
- *See policy* :policy:`CMP0058` *for the motivation behind this feature.*
- Explicit specification of byproducts is supported by the
- :generator:`Ninja` generator to tell the ``ninja`` build tool
- how to regenerate byproducts when they are missing. It is
- also useful when other build rules (e.g. custom commands)
- depend on the byproducts. Ninja requires a build rule for any
- generated file on which another rule depends even if there are
- order-only dependencies to ensure the byproducts will be
- available before their dependents build.
- The :ref:`Makefile Generators` will remove ``BYPRODUCTS`` and other
- :prop_sf:`GENERATED` files during ``make clean``.
- .. versionadded:: 3.20
- Arguments to ``BYPRODUCTS`` may use a restricted set of
- :manual:`generator expressions <cmake-generator-expressions(7)>`.
- :ref:`Target-dependent expressions <Target-Dependent Expressions>`
- are not permitted.
- .. versionchanged:: 3.28
- In custom targets using :ref:`file sets`, byproducts are now
- considered private unless they are listed in a non-private file set.
- See policy :policy:`CMP0154`.
- ``COMMAND``
- Specify the command-line(s) to execute at build time.
- If more than one ``COMMAND`` is specified they will be executed in order,
- but *not* necessarily composed into a stateful shell or batch script.
- (To run a full script, use the :command:`configure_file` command or the
- :command:`file(GENERATE)` command to create it, and then specify
- a ``COMMAND`` to launch it.)
- If ``COMMAND`` specifies an executable target name (created by the
- :command:`add_executable` command), it will automatically be replaced
- by the location of the executable created at build time if either of
- the following is true:
- * The target is not being cross-compiled (i.e. the
- :variable:`CMAKE_CROSSCOMPILING` variable is not set to true).
- * .. versionadded:: 3.6
- The target is being cross-compiled and an emulator is provided (i.e.
- its :prop_tgt:`CROSSCOMPILING_EMULATOR` target property is set).
- In this case, the contents of :prop_tgt:`CROSSCOMPILING_EMULATOR` will be
- prepended to the command before the location of the target executable.
- If neither of the above conditions are met, it is assumed that the
- command name is a program to be found on the ``PATH`` at build time.
- Arguments to ``COMMAND`` may use
- :manual:`generator expressions <cmake-generator-expressions(7)>`.
- Use the :genex:`TARGET_FILE` generator expression to refer to the location
- of a target later in the command line (i.e. as a command argument rather
- than as the command to execute).
- Whenever one of the following target based generator expressions are used as
- a command to execute or is mentioned in a command argument, a target-level
- dependency will be added automatically so that the mentioned target will be
- built before this custom target (see policy :policy:`CMP0112`).
- * ``TARGET_FILE``
- * ``TARGET_LINKER_FILE``
- * ``TARGET_SONAME_FILE``
- * ``TARGET_PDB_FILE``
- The command and arguments are optional and if not specified an empty
- target will be created.
- ``COMMENT``
- Display the given message before the commands are executed at
- build time.
- .. versionadded:: 3.26
- Arguments to ``COMMENT`` may use
- :manual:`generator expressions <cmake-generator-expressions(7)>`.
- ``DEPENDS``
- Reference files and outputs of custom commands created with
- :command:`add_custom_command` command calls in the same directory
- (``CMakeLists.txt`` file). They will be brought up to date when
- the target is built.
- .. versionchanged:: 3.16
- A target-level dependency is added if any dependency is a byproduct
- of a target or any of its build events in the same directory to ensure
- the byproducts will be available before this target is built.
- Use the :command:`add_dependencies` command to add dependencies
- on other targets.
- ``COMMAND_EXPAND_LISTS``
- .. versionadded:: 3.8
- Lists in ``COMMAND`` arguments will be expanded, including those
- created with
- :manual:`generator expressions <cmake-generator-expressions(7)>`,
- allowing ``COMMAND`` arguments such as
- ``${CC} "-I$<JOIN:$<TARGET_PROPERTY:foo,INCLUDE_DIRECTORIES>,;-I>" foo.cc``
- to be properly expanded.
- ``JOB_POOL``
- .. versionadded:: 3.15
- Specify a :prop_gbl:`pool <JOB_POOLS>` for the :generator:`Ninja`
- generator. Incompatible with ``USES_TERMINAL``, which implies
- the ``console`` pool.
- Using a pool that is not defined by :prop_gbl:`JOB_POOLS` causes
- an error by ninja at build time.
- ``JOB_SERVER_AWARE``
- .. versionadded:: 3.28
- Specify that the command is GNU Make job server aware.
- For the :generator:`Unix Makefiles`, :generator:`MSYS Makefiles`, and
- :generator:`MinGW Makefiles` generators this will add the ``+`` prefix to the
- recipe line. See the `GNU Make Documentation`_ for more information.
- This option is silently ignored by other generators.
- .. _`GNU Make Documentation`: https://www.gnu.org/software/make/manual/html_node/MAKE-Variable.html
- ``SOURCES``
- Specify additional source files to be included in the custom target.
- Specified source files will be added to IDE project files for
- convenience in editing even if they have no build rules.
- ``VERBATIM``
- All arguments to the commands will be escaped properly for the
- build tool so that the invoked command receives each argument
- unchanged. Note that one level of escapes is still used by the
- CMake language processor before ``add_custom_target`` even sees
- the arguments. Use of ``VERBATIM`` is recommended as it enables
- correct behavior. When ``VERBATIM`` is not given the behavior
- is platform specific because there is no protection of
- tool-specific special characters.
- ``USES_TERMINAL``
- .. versionadded:: 3.2
- The command will be given direct access to the terminal if possible.
- With the :generator:`Ninja` generator, this places the command in
- the ``console`` :prop_gbl:`pool <JOB_POOLS>`.
- ``WORKING_DIRECTORY``
- Execute the command with the given current working directory.
- If it is a relative path it will be interpreted relative to the
- build tree directory corresponding to the current source directory.
- .. versionadded:: 3.13
- Arguments to ``WORKING_DIRECTORY`` may use
- :manual:`generator expressions <cmake-generator-expressions(7)>`.
- Ninja Multi-Config
- ^^^^^^^^^^^^^^^^^^
- .. versionadded:: 3.20
- ``add_custom_target`` supports the :generator:`Ninja Multi-Config`
- generator's cross-config capabilities. See the generator documentation
- for more information.
- See Also
- ^^^^^^^^
- * :command:`add_custom_command`
|