2012-01-27 2 views

ответ

15

Да.

Посмотрите на gcc-save-temps опцию.

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

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

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

main.i является результатом предварительной обработки.

+0

Это работает отлично! Спасибо! – alesko

+0

@alesko Добро пожаловать! – ouah

+0

Мой компилятор на основе gcc сохраняет только файл '.s' – Adrian

5

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

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

Из gcc, материала станицы руководств обсуждали -E (слегка перефразировать):

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

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

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

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

-save-Temps

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

Таким образом, компиляция foo.c с -c -save-temps создаст файлы foo.i и foo.s, а также foo.o.

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

+0

Спасибо за подробную информацию! – alesko

Смежные вопросы