2017-10-20 5 views
0

내가 지금 깨뜨릴 수없는 이상한 종속성 체인 덕분에, 나는 하나의 C++ 프로젝트를 다른 프로젝트에서 "포스트 빌드"단계로 빌드하고 싶습니다.MSBuild 태스크를 사용하여 동일한 솔루션에서 다른 (C++) 프로젝트를 빌드 하시겠습니까?

나는 명령 줄에서 MSBuild를 호출하는 방법을 알고,하지만 난 그것을 사용하는 것이 더 적합 할 수 있습니다 생각 내장 MSBuild 작업 바로 다른 프로젝트에 빌드를 트리거 :

my.vcxproj :

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
... 
    <Target Name="BuildTheOtherProject" AfterTargets="Build"> 
     <MSBuild Projects="..\theother\theother.vcxproj" Targets="Build" Properties="Configuration=$(Configuration);Platform=$(Platform)"> 
     </MSBuild> 
    </Target> 
</Project> 

이것은 첫눈에 잘 작동하는 것처럼 보이지만 계속 작동합니다 (전체 솔루션의 병렬 프로젝트 구축 등). 올바른 값을 MSBuild 작업에 전달하고 있습니까?

C# 프로젝트에 대해 똑같은 질문을하는 related question이 있는데 csc (vcxproj와 관련 없음)에 문제가있는 것 같아서 일반적인 자세가 궁금합니다.

는 (I 비주얼 스튜디오 2015 기압에 있어요.)

+0

"일반적인 태도가 무엇인지 궁금합니다." 다른 프로젝트를 성공적으로 구축 할 수 없습니까? 코드 스 니펫을 테스트하고 성공적으로 빌드합니다. –

답변

1

예를 올바르게은 MSBuild 작업을 호출한다. 그러나 당신은 이것을해서는 안됩니다. 그것은 나쁜 스타일입니다. 그리고 .vcxproj 파일에 숨어있는이 작은 트릭을 사용하여 앞으로 누군가를 위로 올려야합니다. 종속성을 올바른 방법으로 지정하십시오. 솔루션 파일 (.sln)에서 Visual Studio는 파일이 올바른 순서로 빌드되는지 확인합니다. 더 많은 권한을 원하면 솔루션 파일을 사용하는 대신 <ProjectReference>을 사용하여 종속성을 지정할 수 있지만 다른 주제입니다.

매우 큰 코드 기반을 가진 회사에서 근무한 지난 몇 년 동안 :이 같은 트릭은 한 번도 해본 적이 없으며 절대로해서는 안됩니다.

+0

그리고 실제로 : 처음에는 멋지게 작동하는 것으로 보였습니다. MSBuild가 주기적 종속성을 실제로 감지 했으므로 전체 빌드 실행을 중단해야만했습니다. 그래서 제 경우에는 결국 작동하지 않았고'ProjectReference'가 완료되어야합니다 (현재로서는 불가능합니다). 나는 솔루션 의존성을 경멸한다. 소프트웨어 프로젝트에 둘 이상의 솔루션이 포함되어 있다면 유지 관리가 끔찍하다. 'ProjectReference'로 가십시오 -하지만 먼저 프로젝트 구조를 정리해야합니다. –

+0

Btw : 'vcxproj' "해킹"내에서 MSBuild 태스크를 사용하거나 "ProjectReference"가 작동해야한다고 생각하십니까? –

+0

안녕하세요. 나는 항상 .vcxproj 해킹 내부에 MSBuild 작업을 사용하는 것을 고려할 것이다. 총알을 물고 솔루션 의존성을 사용하는 것보다 훨씬 나쁩니다. Solutions (* .sln)만큼 나쁘지 만 이것보다 낫습니다. –