Automake Yacc Вывод имени файла - PullRequest
3 голосов
/ 17 марта 2011

Проблема:

У меня есть проект, который я портирую с Solaris / Lex / Yacc на Linux / Flex / Bison + Autotools. Я сталкиваюсь со следующей проблемой, и мне интересно, если кто-нибудь там знает, как обойти это. Учитывая цель, как это (только необходимые детали включены):

bin_PROGRAMS=my_prog

my_prog_YFLAGS=-d
my_prog_SOURCES=\
   main.cpp \
   parser.ypp \
   scanner.lpp

Automake генерирует следующие исходные файлы из lpp и ypp:

  • scanner.lpp -> scanner.cpp (согласно инструкции Automake)
  • parser.ypp -> my_prog -parser.cpp и my_prog -parser.h (почему?)

Попытки решения:

Использование параметров bison -b и -o для изменения имен выходных файлов. Проблема в том, что automake принимает выходные имена по умолчанию (parser.tab.c) и перемещает файлы с помощью скрипта. Если я изменю имена выходных файлов с помощью bison, сборка завершится неудачно, когда automake попытается переименовать файлы, которых там нет.

Есть какая-то опция или что-то, чего мне не хватает?

1 Ответ

4 голосов
/ 17 марта 2011

Решение

Так что мне потребовалось на самом деле чтение самого источника automake (для любопытства посмотрите на функцию handle_single_transform ). Если для заданного типа источника заданы параметры для каждой цели, automake автоматически добавляет имя проекта к любым сгенерированным файлам.

Следовательно, меняется:

my_prog_YFLAGS=-d

до

AM_YFLAGS=-d

Заставляет automake правильно генерировать правила, вызывающие parser.ypp для генерации:

  • parser.cpp
  • parser.h
...