}
void Cleaner::DoCleanTarget(Node* target) {
- if (target->in_edge()) {
- Remove(target->path());
- if (!target->in_edge()->rule().depfile().empty())
- Remove(target->in_edge()->EvaluateDepFile());
- if (target->in_edge()->HasRspFile())
- Remove(target->in_edge()->GetRspFile());
- for (vector<Node*>::iterator n = target->in_edge()->inputs_.begin();
- n != target->in_edge()->inputs_.end();
+ if (Edge* e = target->in_edge()) {
+ // Do not try to remove phony targets
+ if (!e->is_phony()) {
+ Remove(target->path());
++ if (!target->in_edge()->rule().depfile().empty())
++ Remove(target->in_edge()->EvaluateDepFile());
+ if (e->HasRspFile())
+ Remove(e->GetRspFile());
+ }
+ for (vector<Node*>::iterator n = e->inputs_.begin(); n != e->inputs_.end();
++n) {
DoCleanTarget(*n);
}