Browse Source

Merge topic 'doc-add_custom_command-depends' into release-3.17

785f2b2df1 Help: Clarify add_custom_command DEPENDS conversion to file paths

Acked-by: Kitware Robot <[email protected]>
Reviewed-by: Ben Boeckel <[email protected]>
Merge-request: !4434
Brad King 5 years ago
parent
commit
6746fdf7cb
1 changed files with 30 additions and 14 deletions
  1. 30 14
      Help/command/add_custom_command.rst

+ 30 - 14
Help/command/add_custom_command.rst

@@ -112,26 +112,42 @@ The options are:
   build time.
 
 ``DEPENDS``
-  Specify files on which the command depends.  Entries in the ``DEPENDS``
-  argument list which may also be target names are assumed to be target names,
-  so only entries which contain a path separator are detected as file paths.
+  Specify files on which the command depends.  Each argument is converted
+  to a dependency as follows:
+
+  1. If the argument is the name of a target (created by the
+     :command:`add_custom_target`, :command:`add_executable`, or
+     :command:`add_library` command) a target-level dependency is
+     created to make sure the target is built before any target
+     using this custom command.  Additionally, if the target is an
+     executable or library, a file-level dependency is created to
+     cause the custom command to re-run whenever the target is
+     recompiled.
+
+  2. If the argument is an absolute path, a file-level dependency
+     is created on that path.
+
+  3. If the argument is the name of a source file that has been
+     added to a target or on which a source file property has been set,
+     a file-level dependency is created on that source file.
+
+  4. If the argument is a relative path and it exists in the current
+     source directory, a file-level dependency is created on that
+     file in the current source directory.
+
+  5. Otherwise, a file-level dependency is created on that path relative
+     to the current binary directory.
+
   If any dependency is an ``OUTPUT`` of another custom command in the same
-  directory (``CMakeLists.txt`` file) CMake automatically brings the other
+  directory (``CMakeLists.txt`` file), CMake automatically brings the other
   custom command into the target in which this command is built.
   A target-level dependency is added if any dependency is listed as
   ``BYPRODUCTS`` of a target or any of its build events in the same
   directory to ensure the byproducts will be available.
-  If ``DEPENDS`` is not specified the command will run whenever
+
+  If ``DEPENDS`` is not specified, the command will run whenever
   the ``OUTPUT`` is missing; if the command does not actually
-  create the ``OUTPUT`` then the rule will always run.
-  If ``DEPENDS`` specifies any target (created by the
-  :command:`add_custom_target`, :command:`add_executable`, or
-  :command:`add_library` command) a target-level dependency is
-  created to make sure the target is built before any target
-  using this custom command.  Additionally, if the target is an
-  executable or library a file-level dependency is created to
-  cause the custom command to re-run whenever the target is
-  recompiled.
+  create the ``OUTPUT``, the rule will always run.
 
   Arguments to ``DEPENDS`` may use
   :manual:`generator expressions <cmake-generator-expressions(7)>`.