Вывод и компиляция препроцессора GCC за один проход

можно ли генерировать вывод препроцессора и компиляцию за один шаг с помощью GCC?

что-то типа:

gcc -E -c main.cc -o main.o

это создаст main.o и main.я!--2-->

2 ответов


да.

посмотреть gcc .

он компилирует исходный файл и сохраняет результат обработки в . (Он также сохраняет результат фазы ассемблера в ).

gcc -save-temps -c main.cc -o main.o

будет генерировать main.o, но и main.i и main.s.

main.i результат препроцессирования.


нет, не с на -s, -c и -E параметры называются параметрами "стоп". Они фактически останавливают процесс в определенный момент, поэтому вы не можете продолжать.

если вы действительно хотите сделать это, вы должны сделать это в два прохода, или использовать -save-temps чтобы сохранить копии временных файлов, обычно удаляемых во время компиляции.

С gcc manpage, вещи обсуждают -E (слегка перефразированный):

если вы только хотите некоторые из этапов компиляции вы можете использовать-x (или суффиксы имени файла), чтобы сообщить gcc, с чего начать, и один из вариантов-c,- S или-E, чтобы сказать, где GCC должен остановиться. Обратите внимание, что некоторые комбинации (например,- X cpp-output-E) предписывают gcc вообще ничего не делать.

- E означает: остановка после этапа предварительной обработки; не запускайте компилятор. Выход в виде предварительно обработанного исходного кода, который отправляется на стандартный вывод (или в выходной файл, если -о указанный.)

если вы используете опцию-E, ничего не делается, кроме предварительной обработки.

и описание -save-temps:

- сохранить-temps

храните обычные" временные " промежуточные файлы постоянно; поместите их в текущий каталог и назовите их на основе исходного файла.

таким образом, компиляция foo.c С-C-save-temps будет производить файлы foo.я и фу.s, а также foo.o.

это создает предварительно обработанный foo.я выходной файл, даже если компилятор обычно использует интегрированный препроцессор.