diff options
Diffstat (limited to 'src/ninja.cc')
-rw-r--r-- | src/ninja.cc | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/src/ninja.cc b/src/ninja.cc index 3912139..5a0c00d 100644 --- a/src/ninja.cc +++ b/src/ninja.cc @@ -38,6 +38,7 @@ #include "graphviz.h" #include "parsers.h" #include "util.h" +#include "clean.h" option options[] = { { "help", no_argument, NULL, 'h' }, @@ -60,7 +61,8 @@ void usage(const BuildConfig& config) { " graph output graphviz dot file for targets\n" " query show inputs/outputs for a path\n" " targets list targets by their rule or depth in the DAG\n" -" rules list all rules\n", +" rules list all rules\n" +" clean clean built files\n", config.parallelism); } @@ -276,6 +278,38 @@ int CmdRules(State* state, int argc, char* argv[]) { return 0; } +int CmdClean(State* state, + int argc, + char* argv[], + const BuildConfig& config) { + Cleaner cleaner(state, config); + if (argc >= 1) + { + string mode = argv[0]; + if (mode == "target") { + if (argc >= 2) { + return cleaner.CleanTargets(argc - 1, &argv[1]); + } else { + Error("expected a target to clean"); + return 1; + } + } else if (mode == "rule") { + if (argc >= 2) { + return cleaner.CleanRules(argc - 1, &argv[1]); + } else { + Error("expected a rule to clean"); + return 1; + } + } else { + return cleaner.CleanTargets(argc, argv); + } + } + else { + cleaner.CleanAll(); + return 0; + } +} + int main(int argc, char** argv) { BuildConfig config; const char* input_file = "build.ninja"; @@ -345,6 +379,8 @@ int main(int argc, char** argv) { return CmdTargets(&state, argc, argv); if (tool == "rules") return CmdRules(&state, argc, argv); + if (tool == "clean") + return CmdClean(&state, argc, argv, config); Error("unknown tool '%s'", tool.c_str()); } |