2014-09-16 1 views
0

소스 코드가없는 VS 2010 vcxproj가 있습니다. PreBuildEvent는 타사 도구를 사용하여 src \ 디렉토리에 소스 코드를 생성하는 배치 파일을 호출합니다. 그건 잘 작동합니다. 문제는 처음으로 소스 코드가 생성 될 때 (또는 정리 된 후에) VisualStudio가 실제로 생성 된 소스를 컴파일하지 않는다는 것입니다. 후속 빌드에서는 컴파일됩니다. 이는 개발자에게 짜증나는 것은 물론 CI 작성기의 문제입니다. VS에서 생성 된 파일을 인식 할 수있는 방법이 있습니까?vcxproj가 처음으로 생성 된 소스 코드를 빌드하지 않습니다.

가 여기 내 .vcxproj

<ItemDefinitionGroup> 
    <PreBuildEvent> 
    <Message>Generating from IDL </Message> 
    <Command>genNAPIEMsgs.bat</Command> 
    </PreBuildEvent> 
</ItemDefinitionGroup> 
<ItemGroup> 
    <ClInclude Include="src\*.h" /> 
</ItemGroup> 
<ItemGroup> 
    <ClCompile Include="src\*.cpp" /> 
</ItemGroup> 
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> 
<ImportGroup Label="ExtensionTargets"> 
</ImportGroup> 
<ItemGroup> 
    <DDSGeneratedFiles Include="src\*.cpp" /> 
    <DDSGeneratedFiles Include="src\*.h" /> 
</ItemGroup> 
<Target Name="AfterClean"> 
    <Message Text="AfterClean target: removing generated source code" /> 
    <Delete Files="@(DDSGeneratedFiles)" /> 
</Target> 
+0

사전 빌드 이벤트의 스 니펫은 어디에 있습니까? – Nicodemeus

+0

괜찮은 조회 용 Google 'msbuild 지연 평가'. 그게 밖으로 나가지 않으면 두 개의 프로젝트를 사용하십시오. –

답변

3

음에서 조각, 그것은 때문에 msbuild를 프로젝트의 평가 순서로 발생합니다. http://msdn.microsoft.com/en-us/library/dd997067.aspx

컴파일에 포함 된 Cpp 파일은 글로벌 항목 ClCompile로 정의됩니다. 그래서 그들은 어떤 목표가 실행되기 전에 평가됩니다. 평가가 시작될 때 cpp 파일이 생성되지 않으므로 생성 된 파일은 컴파일되지 않습니다. 대상의 Return 특성으로 ClCompile 항목을 수정할 수 있습니다. 하지만 내가 아는 한 PreBuildEvent 대상은 아무것도 반환하지 않습니다. 그래서 자신의 타겟을 ClCompile 항목을 수정할 수있는 빌드에 삽입 할 수 있습니다. 잘 나는 그것을 시도하지 않은하지만이 같은 뭔가를 시작 했죠 :

<Target Name="AppendMyGeneratedFilesToClCompile" DependsOnTargets="PreBuildEvent" Returns="@(ClCompile)" > 
    <ItemGroup> 
     <ClCompile Include="src\*.cpp" /> 
    </ItemGroup> 
</Target> 

헤더 파일 ClCompile 대상에 대한 의미가 있습니다. ClInclue에 포함시킬 수는 있지만 (msbuild 관점에서는 msbuild 프로젝트에 포함시키지 않아도됩니다.)

관련 문제