Czy możliwe jest generowanie danych wyjściowych preprocesora i kompilacja w jednym kroku z GCC?Wyjście i kompilacja preprocesora GCC w jednym przejściu
Coś jak:
gcc -E -c main.cc -o main.o
które generują main.o i main.i
Czy możliwe jest generowanie danych wyjściowych preprocesora i kompilacja w jednym kroku z GCC?Wyjście i kompilacja preprocesora GCC w jednym przejściu
Coś jak:
gcc -E -c main.cc -o main.o
które generują main.o i main.i
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.
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.
Dzięki za szczegółowe informacje! – alesko
To działa idealnie! Dziękuję Ci! – alesko
@alesko Nie ma za co! – ouah
Mój kompilator oparty tylko na gcc zapisuje plik '.s' – Adrian