在Visual Studio 2015中时,Win flex-bison始终返回1,但在手动运行时可以工作

问题描述

我安装了与VS集成的Win flex-bison。这允许项目包含.l和.y文件。 问题是当我尝试使用VS进行编译时

1>------ Build started: Project: pasms64,Configuration: Release Win32 ------
1>  Process "pasm64.l" flex file
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Addins\win_flex_bison-latest\custom_build_rules\win_flex_bison_custom_build.targets(129,5): error MSB3721: The command "call win_flex.exe --outfile="pasm64.flex.c" --wincompat --noline  "pasm64.l"" exited with code 1.
========== Build: 0 succeeded,1 Failed,0 up-to-date,0 skipped ==========

当我从命令行手动运行时,它运行正常。

C:\Users\jaret\OneDrive\Desktop\Pet\Pasm\pasm64>cd C:\Users\jaret\OneDrive\Desktop\Pet\Pasm\pasm64

C:\Users\jaret\OneDrive\Desktop\Pet\Pasm\pasm64>call win_flex.exe --outfile="pasm64.flex.c" --wincompat --noline  "pasm64.l"

C:\Users\jaret\OneDrive\Desktop\Pet\Pasm\pasm64>

VS的道具文件

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup
    Condition="'$(BisonBeforeTargets)' == '' and '$(BisonAfterTargets)' == '' and '$(ConfigurationType)' != 'Makefile'">
    <BisonBeforeTargets>Midl</BisonBeforeTargets>
    <BisonAfterTargets>CustomBuild</BisonAfterTargets>
  </PropertyGroup>
  <PropertyGroup>
    <BisonDependsOn
      Condition="'$(ConfigurationType)' != 'Makefile'">_SelectedFiles;$(BisonDependsOn)</BisonDependsOn>
  </PropertyGroup>
  <ItemDeFinitionGroup>
    <Bison>
      <OutputFile>%(Filename).tab.cpp</OutputFile>
      <DefinesFile>%(Filename).tab.h</DefinesFile>
      <CommandLineTemplate>call win_bison.exe [AllOptions] [AdditionalOptions] "%(Filename)%(Extension)"</CommandLineTemplate>
      <Outputs>%(RootDir)%(Directory)%(OutputFile);</Outputs>
      <ExecutionDescription>Process "%(Filename)%(Extension)" bison file</ExecutionDescription>
    </Bison>
  </ItemDeFinitionGroup>
  <PropertyGroup
    Condition="'$(FlexBeforeTargets)' == '' and '$(FlexAfterTargets)' == '' and '$(ConfigurationType)' != 'Makefile'">
    <FlexBeforeTargets>Midl</FlexBeforeTargets>
    <FlexAfterTargets>CustomBuild</FlexAfterTargets>
  </PropertyGroup>
  <PropertyGroup>
    <FlexDependsOn
      Condition="'$(ConfigurationType)' != 'Makefile'">_SelectedFiles;$(FlexDependsOn)</FlexDependsOn>
  </PropertyGroup>
  <ItemDeFinitionGroup>
    <Flex>
      <OutputFile>%(Filename).flex.cpp</OutputFile>
      <Wincompat>true</Wincompat>
      <CommandLineTemplate>call win_flex.exe [AllOptions] [AdditionalOptions] "%(Filename)%(Extension)"</CommandLineTemplate>
      <Outputs>%(RootDir)%(Directory)%(OutputFile);</Outputs>
      <ExecutionDescription>Process "%(Filename)%(Extension)" flex file</ExecutionDescription>
    </Flex>
  </ItemDeFinitionGroup>
</Project>

我的问题是为什么从props文件运行时这不起作用。 我有什么办法可以解决这个问题。

解决方法

问题是路径问题。我通过使用自定义构建步骤解决了这一问题。当我为文件使用完整路径时,它可以按预期工作。没有什么比无声的失败更糟糕了,