Ответ 1
Да, но вы должны указать язык, используя опцию -x
:
# Specify input file as stdin, language as C
flex -t lexer.l | gcc -o lexer.o -xc -
Я ищу вариант gcc
, который заставит его читать исходный файл со стандартного ввода, в основном, поэтому я мог бы сделать что-то вроде этого, чтобы создать объектный файл из инструмента, такого как flex
, который генерирует C код (flex
-t
записывает сгенерированный C в стандартный вывод):
flex -t lexer.l | gcc -o lexer.o -magic-option-here
потому что я действительно не забочусь о сгенерированном файле C.
Есть ли что-то вроде этого, или мне нужно использовать временные файлы?
Да, но вы должны указать язык, используя опцию -x
:
# Specify input file as stdin, language as C
flex -t lexer.l | gcc -o lexer.o -xc -
flex -t lexer.l | gcc -x c -c -o lexer.o -
В основном вы говорите, что имя файла - -
. Указание имени файла -
является несколько стандартным соглашением для выражения "стандартный ввод". Вам также нужен флаг -c
, чтобы вы не делали ссылки. И когда GCC читает из стандартного ввода, вы должны сказать ему, на каком языке это -x
. -x c
говорит, что это C-код.