2009-03-23 3 views
2

저는 현재 대형 Linux 프로젝트를 Visual Studio로 이식하고 있습니다. 이 프로젝트는 여러 제 3 자 라이브러리 (Python, MPI 등)뿐만 아니라 사내 라이브러리 몇 개에 달려 있습니다. 그러나이 라이브러리가 없어도 몇 가지 라이브러리만으로도 빌드 할 수 있습니다. 따라서 가능한 조합마다 다른 구성을 만들고 싶지 않습니다. "Parallel with Python", "Parallel without Python"등 많은 조합이 있습니다. MSBuild를 사용할 수있는 상황입니까?Visual Studio 프로젝트에 너무 많은 구성 피하기

편집 : 내가 고려한 한 가지 가능성은 여러 개의 .vsprops 파일을 만드는 것이지만, 이것은 기본적으로 다른 구성을 만드는 것과 같습니다.

편집 : 아마도 CMake가 내가 찾고있는 것일까 요? 거기에 어떤 CMake 사용자들로부터 듣고 싶습니다 ...

+0

한 번이 문제에 직면하여 구성을 만들었습니다. 12 번 디버그, 12 번 릴리스 ... * 너무 힘들지 않습니다. 나는 덧붙여 질문을 덧붙이 길 바란다. – zildjohn01

답변

0

내가 알고있는 이것에 대한 좋은 해결책이 없습니다. IDE는 도구에 대한 각 명령 행 인수 세트에 대한 구성을 필요로합니다. 따라서 N 개의 다른 인수 집합이 필요한 경우 - 여기에있는 것처럼 들리지만 - N 개의 다른 구성이 필요합니다. 이것이 바로 IDE가 작동하는 방식입니다.

불행한 일이지만 Visual Studio와의 전투에서 거의 승리하지 못하기 때문에 필자는 개인적으로 항상 제공하고 필요한만큼 많은 구성을 만들었습니다. 고통스럽고 조잡한 일입니다. 예를 들어, IDE는 이상적으로 조합 관리를위한 더 나은 메커니즘을 제공해야합니다.하지만 그럴 수는 있습니다. 실제로는 설정하는 데 오랜 시간이 걸리지 않습니다. .

(필자가 이해 하듯이 .vsprops는 설정간에 구성 설정을 쉽게 공유 할 수 있으므로 고통을 덜어 낼 수 있습니다. 따라서 VS의 작은 텍스트 상자는 구성간에 다른 설정을 설정하는 데만 사용됩니다. . 조사 그들이 여전히 가치가 만들 수 있습니다 이것은 내가하지만, 아직 자신을 사용한 적이 일이 아니다, 최근에 그것을 발견)

+0

MSBuild가 VS 2010에서 Visual C++ 프로젝트를 지원할 때까지는 이것이 유일한 해결책입니다. – user76293

0

Visual Studio에서 솔루션을 마우스 오른쪽 단추로 클릭하고 구성 관리자를 선택하면 각 구성에 대한 빌드 대상을 만들 수 있습니다.

기본 설정이있는 경우 툴바에서 콤보 상자가있는 대상 중에서 선택할 수 있습니다.

MSBuild를 사용하는 경우 릴리스와 디버그 중 하나를 선택할 때처럼 대상을 선택할 수도 있습니다.

+0

그건 내 질문에 대답하지 않는다. 어떤 외부 라이브러리가 사용되는지에 관계없이 같은 프로젝트를 만들고 있습니다. 파이썬을 사용하고 싶다면 프로젝트의 일부로 파이썬을 빌드하지 마십시오. 단지 #define HAVE_PYTHON과 필요한 파일을 포함/링크합니다. – user76293

1

한 가지 방법은 조건부 모든 어셈블리 Condition 속성을 사용하여 라이브러리를 참조 할 수 있습니다. 참조 요소 (Python, MPI 등).

이렇게하면 구성 및 플랫폼 속성에서 라이브러리를 분리 할 수 ​​있으며 기본적으로 라이브러리를 만들거나 MSBuild 속성을 사용하여 조건부로 라이브러리를 빌드 할 수 있습니다. 그래서 csproj에서

:

기본 및 올바른 빌드 유형이 설정되어있는 경우에만 MPI 파이썬을 포함
<Reference Include="YourPythonLibrary" 
      Condition="$(BuildType) == '' Or $(BuildType) == 'TypeA'" /> 
<Reference Include="YourMpiLibrary" 
      Condition="$(BuildType) == 'TypeA' Or $(BuildType) == 'TypeB'" /> 

. 구성 또는 플랫폼이 무엇으로 설정되었는지는 중요하지 않으며 각 빌드 유형에 대해 각 라이브러리에 맞게 부울 논리를 조정할 수 있습니다.

MSBuild /p:BuildType=TypeA 
MSBuild /p:BuildType=TypeB 

조건에 비트 연산의 일부 형식을 사용하는 것이 좋겠지 만 MSBuild에서 가능한지 확실하지 않습니까?

참고 : 콘텐츠로 방금 포함 된 경우 참조 요소가 없어도이 접근 방식은 계속 작동합니다.

+0

이 기능은 Visual C++ 프로젝트에서 사용할 수 있습니까? 전에 MSBuild를 사용 해 본 적이 없으므로 그것에 대해 자세히 알지는 못합니다 ... – user76293

+0

오, C# 프로젝트에 대해 얘기하고 있다고 생각했습니다. 미안 해요! C++에 대해 전혀 몰라서 MSBuild 스키마는 완전히 다릅니다. 따라서 http://msdn.microsoft.com/en-us/library/y4sy8216.aspx를 검색하여 "Condition"속성에 해당하는지 확인해야합니다 귀하의 특정 참조 유형. – si618

+0

"UseInBuild"속성은 "AssemblyReference"요소의 부울 값입니다. – si618

관련 문제