Как работает опция gcc Multiple -o?

Я пытаюсь понять, как работает опция -o gcc, я знаю, что она используется для указания имени выходного файла, но что происходит, когда я пишу что-то вроде этого:

gcc main.c -o test0 -o test1

or

gcc main.c -o test0 -o test1 -o test2

?
Я заметил, что учитывается только последний -o <filename>. Итак, мой вопрос: почему я могу указать несколько опций -o? и чем они могут быть полезны?


person LolloFake    schedule 25.01.2015    source источник


Ответы (2)


Похоже, это не задокументировано:

-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
comment
Большое спасибо, ваш пример был тем, что я искал. - person LolloFake; 25.01.2015

У вас может быть только один выходной файл, путь к которому указан с опцией -o.

person Iharob Al Asimi    schedule 25.01.2015
comment
Значит, учитывается только последний -o, а остальные просто отбрасываются? - person LolloFake; 25.01.2015
comment
@LolloFake я вижу, что у вас нет принятых ответов, и я боюсь, что это потому, что вы не знаете об этом, прочитайте это. - person Iharob Al Asimi; 25.01.2015
comment
@LolloFake, и, видимо, теперь вам придется выбрать ответ mafso, он довольно подробный. - person Iharob Al Asimi; 25.01.2015
comment
Я думал, что это вариант для пользователя с высокой репутацией, спасибо за информацию. - person LolloFake; 25.01.2015