由于错误条件,构建目标被跳过;("@(条件名称此处)" - 不确定如何更改

Build target skipped, due to false condition; ('@(ConditionNameHere)' - unsure how to change

本文关键字:何更改 不确定 条件 目标 构建 错误条件      更新时间:2023-10-16

初始免责声明:我在Visual Studio中使用C++的经验有限,所以请注意:)

我正试图在我的项目(VS2013)中使用Flex/Bison的Windows端口,但在遵循指导添加了构建自定义之后(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 ('' != '').

显然,这只是基于一些构建/环境变量而失败的,然而,在谷歌上搜索了很长时间后,我实际上无法弄清楚@(NameHere)变量的设置位置,因此我可以强制构建。

有人能告诉我在哪里/如何更改这些变量以执行新的构建文件吗?

  1. 确保flex.exe和bison.exe在您的PATH中(将它们添加到%PATH%)。我的PATH=%PATH%;C:ColaGnuWin32bin(修复PATH后,需要重新启动Visual Studio)

  2. 确保GNU Tools.targets或(无论文件名如何)列在自定义生成规则中。在VisualStudio中,这是一个全局设置,因此所有解析器项目只需要它一次。如果没有,右键单击项目并选择"生成自定义项",然后单击"查找现有…"。。。并浏览到.targets文件。

  3. 右键单击您的Bison和Flex源文件(.y/.ypp或.l),然后从Item Type中选择适当的文件类型,它应该与您刚才添加的目标相关。Item Type的下拉列表中应该有Flex和Bison这样的值。

关于('@(Flex)' != '')

据我所知,这是一个MSBuild条件,它正在评估变量是否为空。如果它不为空,则Condition为true,并将执行Target。

例如,对于上下文,我的.targets文件有:

  <Target
    Name="_Bison"
    BeforeTargets="$(BisonBeforeTargets)"
    AfterTargets="$(BisonAfterTargets)"
    Condition="'@(Bison)' != ''"
信不信由你,我删除并重新添加了.y和.l文件,一切都正常。很奇怪,但如果你有同样的问题,需要注意。

由库开发人员建议https://sourceforge.net/p/winflexbison/discussion/general/thread/18a9d465/?limit=50