2012-01-27 6 views

Odpowiedz

15

Tak.

Spójrz na opcję gcc-save-temps.

Kompiluje plik źródłowy i zapisuje wynik wstępnego przetwarzania w pliku .i. (Zapisuje również wynik fazy asemblera do pliku .s).

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

wygeneruje main.o ale także main.i i main.s.

main.i jest wynikiem wstępnego przetworzenia.

+0

To działa idealnie! Dziękuję Ci! – alesko

+0

@alesko Nie ma za co! – ouah

+0

Mój kompilator oparty tylko na gcc zapisuje plik '.s' – Adrian

5

Nie, nie z samej -E, opcje -s, -c i -E nazywane są opcje "Stop". Faktycznie zatrzymują proces w określonym punkcie, więc nie możesz kontynuować.

Jeśli chcesz to zrobić, musisz zrobić to w dwóch przejściach lub użyć -save-temps, aby zachować kopie plików tymczasowych normalnie usuniętych podczas kompilacji.

Z gcc podręcznika systemowego, rzeczy omawiamy -E (lekko parafrazując):

Jeśli chcesz tylko niektóre z etapów kompilacji, można użyć -x (lub przyrostków filename) powiedzieć gcc czego zacząć i jedną z opcji -c, -S lub -E, aby powiedzieć, gdzie ma się zatrzymać gcc. Zauważ, że niektóre kombinacje (na przykład -x cpp-output -E) instruują gcc, aby nic nie robił.

-E oznacza: zatrzymaj się po etapie wstępnego przetwarzania; nie uruchamiaj właściwego kompilatora. Dane wyjściowe mają postać wstępnie przetworzonego kodu źródłowego, który jest wysyłany na standardowe wyjście (lub do pliku wyjściowego, jeśli podano parametr -o).

Jeśli użyjesz opcji -E, nic nie zostanie zrobione, z wyjątkiem przetwarzania wstępnego.

oraz opis -save-temps:

-save-temps

przechowywać zwykłe "tymczasowe" pliki pośrednie stałe; umieść je w bieżącym katalogu i nazwij je na podstawie pliku źródłowego.

W ten sposób kompilacja foo.c z opcją -c -save-temps spowoduje utworzenie plików foo.i i foo.s, a także foo.o.

Spowoduje to utworzenie wstępnie przetworzonego pliku wyjściowego foo.i, mimo że kompilator normalnie używa zintegrowanego preprocesora.

+0

Dzięki za szczegółowe informacje! – alesko

Powiązane problemy