mirror of
https://github.com/Kitware/CMake.git
synced 2025-06-11 08:32:37 +08:00

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.
51 lines
1.6 KiB
C++
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;
|
|
}
|