Вывод и компиляция препроцессора 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.я выходной файл, даже если компилятор обычно использует интегрированный препроцессор.