diff --git a/tools/makedep.c b/tools/makedep.c
index 62fa5163199d520597e403e4e8e821e17a4f7260..7a559302c0162da3c3f2ed5e041310d1b5c8110b 100644
--- a/tools/makedep.c
+++ b/tools/makedep.c
@@ -76,6 +76,7 @@ struct incl_file
     struct file       *file;
     char              *name;
     char              *filename;
+    char              *basename;      /* base target name for generated files */
     char              *sourcename;    /* source file name for generated headers */
     struct incl_file  *included_by;   /* file that included this one */
     int                included_line; /* line where this file was included */
@@ -975,7 +976,8 @@ static struct incl_file *add_generated_source( struct makefile *make,
     memset( file, 0, sizeof(*file) );
     file->file = add_file( name );
     file->name = xstrdup( name );
-    file->filename = obj_dir_path( make, filename ? filename : name );
+    file->basename = xstrdup( filename ? filename : name );
+    file->filename = obj_dir_path( make, file->basename );
     file->file->flags = FLAG_GENERATED;
     file->use_msvcrt = make->use_msvcrt;
     list_add_tail( &make->sources, &file->entry );
@@ -3122,7 +3124,7 @@ static void output_source_default( struct makefile *make, struct incl_file *sour
 
     if ((source->file->flags & FLAG_GENERATED) &&
         (!make->testdll || !strendswith( source->filename, "testlist.c" )))
-        strarray_add( &make->clean_files, source->filename );
+        strarray_add( &make->clean_files, source->basename );
     if (source->file->flags & FLAG_C_IMPLIB) strarray_add( &make->implib_objs, strmake( "%s.o", obj ));
 
     if (need_obj)