mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 10:50:16 -06:00
add_custom_command: convert DEPENDS path arguments to absolute paths
This is only done if they are "obviously" paths in that they contain a directory separator. Fixes: #17111
This commit is contained in:
@@ -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
|
||||
|
||||
8
Help/release/dev/add_custom_command-depends-path.rst
Normal file
8
Help/release/dev/add_custom_command-depends-path.rst
Normal 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.
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user