-o файл Поместить вывод в файл. Это применяется независимо от типа полученного вывода, будь то исполняемый файл, объектный файл, файл ассемблера или предварительно обработанный код C. Поскольку может быть указан только один выходной файл, нет смысла использовать -o при компиляции более чем одного входного файла, если только вы не хотите выводить исполняемый файл.
Если -o не указано, поведение по умолчанию заключается в создании исполняемого файла с именем a.out, объектного файла для source.suffix с именем source.o, его ассемблерного файла в source.s и всего C исходного кода, предварительно обработанного на стандартном выходе.
source : http://www.linuxcertif.com/man/1/gcc/
надеюсь будет полезно