2009-06-16 43 views
49

Poszukuję opcji do gcc, która sprawi, że będzie czytać plik źródłowy ze standardowego wejścia, głównie dlatego, że mogę zrobić coś takiego, aby wygenerować plik obiektowy z narzędzia takiego jak flex, które generuje kod C (flex-t opcja zapisuje wygenerowany C na standardowe wyjście):Czy można odczytać gcc z potoku?

flex -t lexer.l | gcc -o lexer.o -magic-option-here 

bo nie troszczą się o generowanym pliku C.

Czy coś takiego istnieje, czy muszę używać plików tymczasowych?

+1

Wygenerowany plik C dobrze jest mieć w pobliżu, jeśli zajdzie potrzeba debugowania tego kodu. – laalto

+2

@laalto: To dobra uwaga, ale kod, który generuje flex, nie jest tak czy inaczej czytelny dla człowieka. – Zifre

Odpowiedz

58

Tak, ale trzeba określić język, za pomocą opcji -x:

# Specify input file as stdin, language as C 
flex -t lexer.l | gcc -o lexer.o -xc - 
+1

Pomyślałem, że może być - (wiele innych narzędzi z niego korzysta), ale nie mogłem nic na ten temat znaleźć na stronie man ... – Zifre

16
flex -t lexer.l | gcc -x c -c -o lexer.o - 

W zasadzie można powiedzieć, że nazwa pliku jest - Określanie, że nazwa pliku jest - jest dość standardowy Konwencja mówiąc ' standardowe wejście ". Również chcesz, aby flaga -c nie robiła linków. A kiedy gcc czyta ze standardowego wejścia, musisz powiedzieć, jaki to jest język z -x. -x c mówi, że to kod C.

+0

Wiem, co to jest -c, zostawiłem to dla uproszczenia (ponieważ mam wiele innych opcji na flex i gcc też). – Zifre

Powiązane problemy