1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-06-11 08:32:37 +08:00
CMake/Source/cmAddDependenciesCommand.cxx
Juan Ramos 197cb419d1 add_custom_command: Add CODEGEN support
By specifying CODEGEN as an argument to add_custom_command the
custom command will be added to a codegen build target.

The intent is to provide a convenient way for users to get
their generated files without having to build the whole project.

This can be helpful for code analysis tools which can be useful
for IDEs and CI.
2024-07-01 12:02:49 -04:00

51 lines
1.6 KiB
C++

/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#include "cmAddDependenciesCommand.h"
#include "cmExecutionStatus.h"
#include "cmMakefile.h"
#include "cmMessageType.h"
#include "cmRange.h"
#include "cmStringAlgorithms.h"
#include "cmTarget.h"
bool cmAddDependenciesCommand(std::vector<std::string> const& args,
cmExecutionStatus& status)
{
if (args.size() < 2) {
status.SetError("called with incorrect number of arguments");
return false;
}
cmMakefile& mf = status.GetMakefile();
std::string const& target_name = args[0];
if (mf.IsAlias(target_name)) {
mf.IssueMessage(
MessageType::FATAL_ERROR,
cmStrCat("Cannot add target-level dependencies to alias target \"",
target_name, "\".\n"));
}
if (cmTarget* target = mf.FindTargetToUse(target_name)) {
// skip over target_name
for (std::string const& arg : cmMakeRange(args).advance(1)) {
target->AddUtility(arg, false, &mf);
target->AddCodegenDependency(arg);
}
} else {
mf.IssueMessage(
MessageType::FATAL_ERROR,
cmStrCat(
"Cannot add target-level dependencies to non-existent "
"target \"",
target_name,
"\".\nThe add_dependencies works for "
"top-level logical targets created by the add_executable, "
"add_library, or add_custom_target commands. If you want to add "
"file-level dependencies see the DEPENDS option of the "
"add_custom_target and add_custom_command commands."));
}
return true;
}