The one exception to the above is when the executable shares the base name with the single input: gcc foo.c -o dir/foo ... in which case aux outputs are named dir/foo.* and dump outputs named dir/foo.c.*. The location and the names of auxiliary and dump outputs can be adjusted ...