Построение цели пропущено из-за ложного состояния; (‘@ (ConditionNameHere)’ — не знаете, как изменить

Первоначальный отказ от ответственности: у меня ограниченный опыт работы с C ++ в Visual Studio, так что будьте добры 🙂

Я пытаюсь использовать порт Windows Flex / Bison в своем проекте (VS2013), но после следования инструкциям, чтобы добавить настройки сборки (http://sourceforge.net/p/winflexbison/wiki/Visual%20Studio%20custom%20build%20rules/), условие не выполняется и не выполняется:

   Target "BisonTarget" skipped, due to false condition; ('@(Bison)' != '') was evaluated as ('' != '').
Target "FlexTarget" skipped, due to false condition; ('@(Flex)' != '') was evaluated as ('' != '').

Очевидно, что это просто сбой, основанный на некоторой переменной build / environment, однако после долгого поиска в Google я не могу понять, где установлены переменные @ (NameHere), чтобы я мог форсировать сборку.

Может кто-нибудь посоветовать, где / как я бы изменил эти переменные, чтобы включить выполнение новых файлов сборки?

0

Решение

  1. Убедитесь, что flex.exe и bison.exe находятся в вашей переменной PATH (добавьте их в% PATH%). У меня в моем PATH=%PATH%;C:\Cola\GnuWin32\bin
    (Как только вы исправите PATH, вам нужно перезапустить Visual Studio)

  2. Убедитесь, что GNU Tools.targets или (независимо от имени файла) указано в пользовательских правилах сборки. В Visual Studio это глобальный параметр, поэтому он нужен только один раз для всех ваших проектов анализатора. Если нет, щелкните правой кнопкой мыши по проекту и выберите Build Customization, затем нажмите Find Existing … и перейдите к файлу .targets.

  3. Щелкните правой кнопкой мыши по исходным файлам Bison и Flex (.y / .ypp или .l) и выберите из Item Type соответствующий тип файла, он должен соответствовать целям, которые вы только что добавили. В раскрывающемся списке должны быть значения, такие как Flex и Bison. Item Type,

относительно ('@(Flex)' != '')

Насколько я знаю, это условие MSBuild, и оно оценивает переменную как пустую. Если оно не пустое, Условие истинно и выполнит Цель.

Например, для контекста мой файл .targets имеет:

  <Target
Name="_Bison"BeforeTargets="$(BisonBeforeTargets)"AfterTargets="$(BisonAfterTargets)"Condition="'@(Bison)' != ''"
0

Другие решения

Верьте или нет, я удалил и повторно добавил файлы .y и .l, и все заработало. Довольно странно, но кое-что стоит заметить, если у вас возникла такая же проблема.

Был предложен разработчиками библиотеки в https://sourceforge.net/p/winflexbison/discussion/general/thread/18a9d465/?limit=50

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector