Merge topic 'add_custom_command-depends-path'

f5126badd8 add_custom_command: convert DEPENDS path arguments to absolute paths
a5f44ec925 cmAddCustomCommandCommand: remove unnecessary braces

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !4148
This commit is contained in:
Kyle Edwards
2019-12-20 17:58:15 +00:00
committed by Kitware Robot
5 changed files with 34 additions and 5 deletions

View File

@@ -112,9 +112,11 @@ The options are:
build time.
``DEPENDS``
Specify files on which the command depends. If any dependency is
an ``OUTPUT`` of another custom command in the same directory
(``CMakeLists.txt`` file) CMake automatically brings the other
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.
If any dependency is an ``OUTPUT`` of another custom command in the same
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

View File

@@ -0,0 +1,8 @@
add_custom_command-depends-path
-------------------------------
* The :command:`add_custom_command` command learned to detect paths in
``DEPENDS`` arguments and convert them to paths relative to the current
binary directory. This only applies to paths which contain a ``/`` or ``\\``
in them because names like ``filename.txt`` could also be target names and
cannot be coverted into absolute paths blindly.

View File

@@ -261,9 +261,9 @@ bool cmAddCustomCommandCommand(std::vector<std::string> const& args,
case doing_target:
target = copy;
break;
case doing_depends: {
case doing_depends:
depends.push_back(copy);
} break;
break;
case doing_outputs:
outputs.push_back(filename);
break;

View File

@@ -8,6 +8,7 @@
#include <cmext/algorithm>
#include "cmAlgorithms.h"
#include "cmCustomCommand.h"
#include "cmCustomCommandLines.h"
#include "cmGeneratorExpression.h"
@@ -29,6 +30,9 @@ void AppendPaths(const std::vector<std::string>& inputs,
cmExpandedList(cge->Evaluate(lg, config));
for (std::string& it : result) {
cmSystemTools::ConvertToUnixSlashes(it);
if (cmContains(it, '/') && !cmSystemTools::FileIsFullPath(it)) {
it = cmStrCat(lg->GetMakefile()->GetCurrentBinaryDirectory(), '/', it);
}
if (cmSystemTools::FileIsFullPath(it)) {
it = cmSystemTools::CollapseFullPath(it);
}

View File

@@ -534,3 +534,18 @@ add_custom_command(
set_property(SOURCE "${gen_file}" PROPERTY SYMBOLIC ON)
add_custom_target(command_expand_lists ALL DEPENDS "${gen_file}")
set_property(TARGET command_expand_lists PROPERTY CMPARGS "${cmp_args}")
set(depends_path "./depended_upon_path.txt")
add_custom_command(
OUTPUT ${depends_path}
COMMAND ${CMAKE_COMMAND} -E touch ${depends_path}
)
add_custom_command(
OUTPUT "depends_on_path.txt"
COMMAND ${CMAKE_COMMAND} -E touch "depends_on_path.txt"
DEPENDS ${depends_path}
)
add_custom_target(depends_on_path ALL DEPENDS "depends_on_path.txt")