якк и бизон в визуальной студии - PullRequest
5 голосов
/ 03 июля 2011

Я собираюсь перенести проект C, который был для Unix, в Windows. До сих пор я мог сделать его компиляцией, но не сборкой. Проблема, которую я получаю, заключается в том, что некоторые функции, которые объявлены в заголовочных файлах, определены в файлах yacc. Поэтому я получаю следующие ошибки:

 error LNK2001: unresolved external symbol function_name

Я добавляю файлы .y и .l в исходную директорию проекта. Мне кажется, я не могу портировать файлы yacc в версию для Windows или я делаю что-то глупое. Я ищу его в Интернете, но не могу получить соответствующее руководство для это. Не могли бы вы дать мне знать

  1. Как добавить в проект файлы .y или .l.
  2. Как мне сделать эти файлы совместимыми с Windows?
  3. Как я могу связать их с другими объектными файлами.

EDIT

Я пытался изменить .l файлы в .yy.c файлы, используя flex.exe. Для него есть команда

     c:\> flex.exe name.l

Предположим, что и flex.exe, и name.l находятся в C;>. И я загрузил все эти файлы .l .y(previously present for parsing in unix system) .yy.c(corrsonding yacc file for windows) в решении ранее существовавшего проекта. После компиляции я получаю следующее

 Can't read the header file  parserheaderfile.h 

Это заголовочный файл, который должен быть сгенерирован bison в Unix система. Так что я думаю, что не могу сделать bison совместимым для windows. Так что, пожалуйста, мне, как я могу решить эту проблему?

Заранее спасибо.

1 Ответ

7 голосов
/ 09 июля 2011

Вам нужно добавить пользовательские правила сборки для ваших .y и .l файлов.Для этого вам необходимо

  1. создать один фиктивный файл .c для файла .l и .y файл
  2. добавить файлы .l, .y и оба .cв проект
  3. щелкните правой кнопкой мыши файл .l и выберите свойства
  4. Конфигурация-> Все конфигурации
  5. Общие сведения-> Тип элемента-> Пользовательский инструмент сборки
  6. Применить
  7. Пользовательский инструмент сборки-> Общие-> Командная строка -> flex -olexer.c lexer.l
  8. Пользовательский инструмент построения-> Общие-> Выходы -> lexer.c
  9. Custom Build Tool-> General-> Дополнительные зависимости -> parser.y parser.c
  10. Применить
  11. выберите файл .y в обозревателе решений
  12. Конфигурация-> Все конфигурации
  13. Общее-> Тип элемента-> Инструмент пользовательской сборки
  14. Применить
  15. Инструмент пользовательской сборки-> Общие-> Командная строка -> bison -oparser.c parser.y
  16. Выборочная сборкаTool-> General-> Outputs -> parser.c parser.h

Также вам нужно иметь flex.exe, bison.exe и m4.exe в системном пути поиска.Другим недостатком является то, что VS не может правильно определить зависимости, поэтому при изменении чего-либо в файлах синтаксического анализатора или лексера необходимо вручную перестроить проект.

...