2011-09-15 5 views
2

테이블이 .tbl 파일로 정의되는 사용자 지정 개체 - 관계형 매핑 시스템을 사용하는 C++ 프로젝트가 있습니다. 이들은 각각 .h 및 .cpp 파일을 생성하는 코드 생성기를 통해 실행됩니다.여러 출력을 가진 Visual Studio의 사용자 지정 빌드 규칙

<?xml version="1.0" encoding="utf-8"?> 
<VisualStudioToolFile 
    Name="z_dbbld" 
    Version="8.00" 
    > 
    <Rules> 
     <CustomBuildRule 
      Name="z_dbbld" 
      DisplayName="z_dbbld" 
      CommandLine="$(SolutionDir)\tools\z_dbbld $(InputName)" 
      Outputs="$(InputName).cpp" 
      FileExtensions="*.tbl" 
      ExecutionDescription="z_dbbld $(InputName)" 
      > 
      <Properties> 
      </Properties> 
     </CustomBuildRule> 
    </Rules> 
</VisualStudioToolFile> 

문제는 종속성입니다 :

내가 비주얼 스튜디오 2008과 2010

이,이 일하는 사용자 지정 빌드 규칙을 얻으려고 내가 지금까지 무엇을 가지고 . 파일이없는 깨끗한 체크 아웃에서 빌드를 실행하면이 규칙에 의해 생성 된 .h 파일에 대해 "파일을 열 수 없습니다"오류가 발생합니다.

출력을 "$ (InputName) .h"로 변경하려고 시도했지만 여전히 오류가 발생합니다.

이제 코드 생성기가 실행될 때 이러한 파일이 만들어집니다. 다시 컴파일하면 오류가 발생하지 않습니다. 왜냐하면 모든 파일이 첫 번째 패스에서 생성 되었기 때문입니다. 그러나 그것은 신선한 체크 아웃에서 작동하지 않는 깨끗하고 자동화 된 빌드를 만듭니다.

아이디어가 있으십니까?

답변

0

출력의 파일을 빌드의 주요 부분에 지정해야한다고 생각합니다. 마지막 문장은 http://msdn.microsoft.com/en-us/library/hefydhhy.aspx입니다. 아마도 가장 쉬운 방법은 파일에 대한 참조를 추가 한 다음 삭제하고 codegen 단계가 실행되는지 확인하는 것입니다.

+0

출력 파일을 빌드의 주요 부분에 추가합니다. 내 문제는 빌드 .h 및 .cpp 추가하고있는 .tbl .h를 생성 할 수 있습니다 규칙을 가지고, 그것은 .cpp, 찾을 수 없다는 불평, 그리고있는 경우 .tbl에서 .cpp를 생성 할 수 있다고 말하는 규칙은 .hbl을 찾을 수 없다고 말합니다. 규칙에 의해 래핑 된 도구는 두 가지 모두를 생성하지만이를 알리는 규칙을 구성하는 방법을 파악할 수 없습니다. –

+0

'에 대한 문서에서 세미콜론으로 구분 된 여러 파일을 나열 할 수있는 것처럼 들립니다. – sblom

0

sblom이주는 대답은 정확하지만 그 이유를 설명하지는 않습니다.

각 빌드 규칙 (사용자 정의 또는 기본)에 대해 VS 빌드 시스템은 빌드해야하는 프로젝트 부분을 결정할 수 있도록 입력 및 출력의 전체 목록을 알아야합니다.

빌드 규칙은 생성 된 .cpp 파일을 출력으로 선언하므로 VS는 이에 대해 알고 있으며 자동으로이 파일을 빌드합니다. 헤더 파일을 생략 했으므로 VS는 그것에 대해 알지 못하므로이 헤더를 포함하는 모든 소스 파일은 파일을 가져올 위치와 빌드하지 못하는 위치를 알 수 없습니다. 이 상황에서 빌드를 작동 시키려면이 .h 파일이 포함 된 디렉토리를 include 경로에 추가 한 다음이 파일의 #include가 작동하도록해야합니다. 기본적으로 VS가이 파일에 대해 다른 방식으로 알게합니다.

반대로 헤더 파일을 출력으로 선언하도록 빌드 규칙을 변경하면이 헤더 파일을 포함하는 소스 파일은이 파일을 가져올 위치를 알 수 있지만 이제 VS는 .cpp 파일에 대해 알지 못하므로 ' 그것을 구축하지 마십시오. 이 경우의 해결 방법은 생성 된 .cpp 파일을 프로젝트에 원본 파일로 명시 적으로 추가하는 것입니다. 위의 경우와 마찬가지로, 생성 시스템이 빌드 시스템에서 생성 된 파일을 인식하도록 트릭을 사용하고 있습니다.

그러나 위의 해결 방법을 사용하면 파일을 알지 못하는 대가를 보상하기 때문에 최상의 해결 방법이 아닙니다. 이 문제를 해결하는 가장 좋은 방법은 .cpp와 .h 파일을 세미콜론으로 구분하여 규칙의 출력으로 선언하는 것입니다. 이렇게하면 VS가 두 파일 모두에 올바른 동작을 적용 할 수 있습니다.

+0

죄송합니다. 나는 다른 프로젝트에 끌렸다. 출력 파일로 .h 및 .cpp를 모두 지정하면 VS에서 불평하지 않지만 종속성을 올바르게 연결하지 못하는 것 같습니다. 즉, 여전히 생성되지 않은 .h 파일을 #include .cpp 파일로 컴파일하려고 시도합니다. –

관련 문제