Можно ли заставить gcc читать из канала? - PullRequest
60 голосов
/ 17 июня 2009

Я ищу опцию gcc, которая заставит его читать исходный файл из стандартного ввода, главным образом, чтобы я мог сделать что-то подобное для генерации объектного файла из инструмента, подобного flex, который генерирует C код (опция flex -t записывает сгенерированный C в стандартный вывод):

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

потому что меня не волнует сгенерированный файл C.

Существует что-то подобное или мне нужно использовать временные файлы?

Ответы [ 2 ]

71 голосов
/ 17 июня 2009

Да, но вы должны указать язык, используя опцию -x:

# Specify input file as stdin, language as C
flex -t lexer.l | gcc -o lexer.o -xc -
18 голосов
/ 17 июня 2009
flex -t lexer.l | gcc -x c -c -o lexer.o -

По сути, вы говорите, что имя файла - Указание, что имя файла - это несколько стандартное соглашение для выражения «стандартный ввод». Вам также нужен флаг -c, чтобы не связываться. И когда gcc читает из стандартного ввода, вы должны сказать ему, какой это язык с -x. -x c говорит, что это код C.

...