2009-06-16 9 views
49

Tôi đang tìm một tùy chọn để gcc mà sẽ làm cho nó đọc một tệp nguồn từ đầu vào tiêu chuẩn, chủ yếu là vì vậy tôi có thể làm một cái gì đó như thế này để tạo ra một tệp đối tượng từ một công cụ như flex tạo mã C (flex 's -t tùy chọn ghi C được tạo thành đầu ra tiêu chuẩn):Có thể nhận được gcc để đọc từ một đường ống không?

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

vì tôi không thực sự quan tâm đến tệp C được tạo.

Có điều gì đó như thế này tồn tại hay tôi phải sử dụng tệp tạm thời?

+1

Tệp C được tạo là tốt để có xung quanh nếu bạn cần gỡ lỗi mã đó. – laalto

+2

@laalto: Đó là một điểm tốt, nhưng mã mà flex tạo ra không phải là con người rất dễ đọc được. – Zifre

Trả lời

58

Vâng, nhưng bạn phải xác định ngôn ngữ sử dụng -x tùy chọn:

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

Tôi nghĩ rằng nó có thể là - (nhiều công cụ khác sử dụng nó), nhưng tôi không thể tìm thấy bất cứ điều gì về nó trong trang ... – Zifre

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

Về cơ bản bạn nói rằng tên tập tin được - Xác định rằng một tên tập tin là - là một quy ước nào chuẩn cho nói ' đầu vào tiêu chuẩn '. Bạn cũng muốn cờ -c để bạn không liên kết. Và khi gcc đọc từ đầu vào tiêu chuẩn, bạn phải cho biết ngôn ngữ này là gì với -x. -x c nói đó là mã C.

+0

Tôi biết những gì -c là, tôi chỉ để nó ra cho đơn giản (vì tôi có rất nhiều tùy chọn khác trên flex và gcc quá). – Zifre