Похоже, это не задокументировано:
-o
файл Поместите выходные данные в файл файл. Это относится к любому виду производимого вывода, будь то исполняемый файл, объектный файл, файл на ассемблере или предварительно обработанный код C.
Если -o
не указано, по умолчанию исполняемый файл помещается в a.out, а объектный файл для source.suffix — в source< strong>.o, его ассемблерный файл в source.s, предварительно скомпилированный заголовочный файл в source.suffix. gch и весь предварительно обработанный исходный код C на стандартный вывод.
Играя с ним, кажется, что он рассматривается как «глобальный» параметр, которому разрешено указывать только один выходной файл, где действует только последний заданный параметр -o
(как указано в вопросе).
$ gcc -c foo.c -o fooX.o bar.c -o barX.o
gcc: fatal error: cannot specify -o with -c, -S or -E with multiple files
compilation terminated.
$ gcc -c foo.c -o fooX.o -o fooY.o # produces fooY.o only
Переопределение предыдущих параметров, если предыдущий конфликтует, является обычным явлением для многих инструментов командной строки, что иногда может быть полезно при написании сценариев. В качестве (возможно, не очень хорошего) примера рассмотрим
alias gcc='gcc -o my_default' # a.out is a bad default name
в вашем .bashrc; ты все еще можешь печатать
gcc -o foo foo.c
не получая ошибки. (Этот пример плохой, потому что gcc -c foo.c bar.c
теперь недействителен, но, надеюсь, он дает представление о том, чем что-то подобное может быть полезным.)
person
mafso
schedule
25.01.2015