2009-02-27 6 views
4

이론적으로 자동화와 관련된 모든 종류의 문제를 야기하기 때문에 IDE 기반 프로젝트 파일을 요구하지 않고 프로젝트를 빌드하는 이상적인 방법을 알고 있습니다. 하지만 아직 VisualStudio 프로젝트에 의존하지 않는 Windows에서 컴파일하는 프로젝트 (Ok, 분명히 일부 오픈 소스 프로젝트는 Cygwin에서 완료되지만, 여기서는 일반적입니다)에서 작업해야합니다. 우리가 메이크 파일을 실행하는 데 VS를 사용하는 경우 다른 한편으로VisualStudio에서 Makefile을 사용하는 좋은 기술은 무엇입니까?

, 우리는 컴파일 옵션 창의 모든 혜택을 느슨하게하고, 외부 makefile을 유지하기 위해 고통이된다.

그렇다면 VS를 사용하는 사람들이 실제로 외부 메이크 파일을 어떻게 처리합니까? 나는 ...이 할 수있는 무통 시스템을 찾을 아직

또는 그것의 좋은 사례를 전파하지만, 현실에서 대부분의 사람들은, 이렇게하지

?

답변

2

우리는 컴파일 단계에서 MSBuild를 호출하는은 NAnt 스크립트를 사용합니다. NAnt를 사용하면 소스 제어 개정 번호와 일치하도록 버전 번호를 설정하고, 코드 적용 범위 정보를 조합하고, 배치 소스를 어셈블 및 압축하는 것과 같은 사전 및 사후 구축 작업을 수행 할 수 있습니다. 하지만 여전히 그 중심에서는 MSBuild가 실제로 컴파일 작업을 수행하고 있습니다.

NAnt 빌드를 사용자 지정 도구로 IDE에 통합하여 빌드 또는 연속 통합 서버와 개발자가 동일한 방식으로 사용할 수 있습니다.

1

개인적으로, 나는 내 솔루션이나 프로젝트에 msbuild 전화를 Rake를 사용합니다. 정기적 인 개발을 위해 나는 IDE와 모든 이점을 사용합니다.

Rake이 설정되어 테스트를 컴파일, 컴파일 및 실행하거나 실행 테스트를 컴파일하고 배포 가능한 아티팩트를 만들 수 있습니다.

일단 빌드 스크립트를 작성하면 연속 통합을 설정하고이를 사용하여 배포를 자동화하는 것과 같은 일을 시작하기가 정말 쉽습니다. 당신은 또한 follow these steps to set it up 경우 IDE 내에서 빌드 도구를 대부분 사용할 수 있습니다

.

+0

Garry : MsBuild와 Rake를 함께 사용하는 것에 대해 질문이 있습니다. 나는 당신의 대답을 얻고 싶습니다! 감사! http://stackoverflow.com/questions/679009/anyone-have-experience-calling-rake-from-msbuild-for-code-gen-and-other-benefits –

+0

솔직히 말해서 내가 한 일은 그 이상입니다. 그러나 나는 당신이나 다른 사람이 무엇을 생각해 내는지에 관심이 있기 때문에 그 질문을 계속 지켜 볼 것입니다. –

+0

msbuild를 직접 호출하면 로켓 과학이 아닙니다. –

2

실제로는 아마도 실제로는 없습니다.

메이크 파일을 빌드 마스터로 선호하지만 개발자는 모든 시간을 Visual Studio IDE 내부에서 보내고 변경할 때 makefile이 아닌 vcproj 파일을 사용합니다. 따라서 메이크 파일을 사용하여 글로벌 빌드를 수행하는 경우 8-10 개의 다른 프로젝트 파일/프로젝트 파일과 동기화가 너무 쉽습니다.

전 팀원과 함께 할 수있는 유일한 방법은 내 빌드 프로세스 스크립트에서 솔루션 파일에 직접 devenv.exe를 실행하는 것입니다.

은 섹션이나 별도의 유틸리티 프로젝트를 빌드 사용자 지정 사전 빌드 또는 거기에 내 빌드에 거의 메이크 파일이 있습니다.

+0

맞춤식 건물에 문제가 있습니까? 그것은 메이크 파일을 최신으로 유지하도록 강요합니다. 그렇죠? –

+0

개발자들은 IDE보다 IDE를 선호하므로 Nmake를 배워야합니다. 그렇게하면 메이크 파일 유지 관리가 내 어깨에 걸릴 것이고 나는 그들을 위해 일하지 않을 것입니다. – SumoRunner

+0

devenv.exe를 실행할 필요가 없습니다. Msbuild는 .NET 프레임 워크의 일부입니다. –

1

우리는 빌드 스크립트 (또는 명령 줄)에서 우리의 프로젝트를 구축 (IDE를 시작 같은 EXE)을으로 Devenv.exe를 사용합니다. IDE를 표시하지 않고 모든 콘솔에 다시 기록됩니다/빌드 옵션을 지정하는 경우

자세한 내용은 http://msdn.microsoft.com/en-us/library/xee0c8y7(VS.80).aspx를 참조하십시오 (또는 로그 파일을 당신은/아웃 옵션을 지정하는 경우)

예 :

devenv.exe [솔루션 파일 이름]/빌드 [프로젝트 이름]/빌드 "릴리스 | Win32"/ Out solution.log

여기서 "Release | Win32"는 솔루션 및 솔루션에 정의 된대로 구성된 구성입니다. .log는 컴파일러 출력을 가져 오는 파일입니다 (이것은 c에서 무엇이 잘못되었는지 알아 내야 할 때 유용합니다. ompile)

+0

실제로 결과를 콘솔에 표시하는 것은 devenv.com입니다. devenv.exe는 실행 후 즉시 반환되고 백그라운드에서 빌드 프로세스를 수행합니다. – macbirdie

+0

적어도 VS 2005의 경우입니다. – macbirdie

+0

VS가 솔루션 빌드와 프로젝트 컴파일을 위해 msbuild를 사용하기 때문에 콘솔 빌드에 msbuild를 사용하는 것이 더 좋습니다 – abatishchev

1

우리는 vcproj 파일을 구문 분석하고 그로부터 메이크 파일 조각을 생성하는 프로그램을 가지고있다. (여기에는 파일 목록과 #define이 포함되며 사용자 정의 빌드 단계에 대한 지원이 제한적입니다.) 그런 다음이 조각들은 보통의 GNU make 물건을 만드는 마스터 makefile에 포함된다.

(이것은 우리가 대상 시스템 중 하나에 대한 모든이며 그 도구는 비주얼 스튜디오에 대한 네이티브 지원이 없습니다.)

이이 작품의 엄청난 금액을 요구하지 않았다. 그것을 설정하는 날, 그리고 아마도 하루나 이틀 동안 즉시 명백하지 않은 몇 가지 문제를 해결할 수 있습니다. 그리고 컴파일러 설정은 마스터 메이크 파일 (작은 텍스트 상자를 더 이상 사용하지 않음)에 의해 제어되지만, 아무도 새로운 파일을 추가하고 일반적인 방식으로 빌드에 정의 할 수 있습니다.

즉, Visual Studio의 빌드 구성 처리에 내재 된 조합 문제는 여전히 남아 있습니다.

5

MSBuild를 살펴보십시오!

  • MSBuild는 VS의 sln/csproj 파일로 작업 할 수 있으므로 간단한 프로젝트의 경우 직접 호출 할 수 있습니다.
  • 더 많은 제어가 필요하다면 자신의 빌드 프로세스에서 프로젝트를 래핑하고 자신의 작업을 추가하십시오. - 매우 확장 가능합니다!

은 (내가 샘플을 추가하고 싶어하지만,이 edior은 완전히 XML ... 죄송 엉망)

1

왜 "VisualStudio 프로젝트에 의존하지 않는 Windows에서 컴파일"프로젝트를 갖고 싶습니까? 이미 솔루션 파일이 있습니다. 콘솔 빌드와 함께 사용할 수 있습니다.

나는 내가 부족 뭔가

있는가 ... 빌드 시스템이 우리만큼 복잡하지 않은 경우 당신이 메이크, NANT 심지어 간단한 배치 파일과 함께와의 MSBuild를 사용하는 것이 좋을 걸?

+0

시스템의 10 개 구성 요소와 모듈의 전체 빌드는 약 2 시간 (릴리스에만 해당)이 소요되며 모든 빌드 모드에서 몇 시간이 걸립니다. 플러스 8 시스템은 유닉스 및 다른 컴파일러에서 컴파일해야합니다. 그래, 그게 복잡한 종류 야 :) –

+0

우리는 유닉스와 윈도우 용 빌드를 만들어야한다. 이를 위해 우리는 msbuild, makefile 및 ant의 조합을 사용합니다. 그리고 그렇게 나쁜 것은 아닙니다 :) 아마도 빌드 프로세스를 최적화하려고 노력해야합니다 - 적어도 반복 빌드 속도. 우리는 최근에 35 분에서 7 분으로 빌드 시간을 줄였습니다 ... – ya23

+0

링크 및 전체 프로그램 최적화가 약 1/3의 시간을 차지하기 때문에 솔리드 스테이트 드라이브가 있습니다. 다른 최적화에 대해 살펴 보았으나 아직 행운은 없습니다. 어쨌든 설정이 현재 설정보다 우위에 있지만 빌드 엔지니어가 없습니다. –

1

이 코드는 어떻습니까?

public TRunner CleanOutput() 
{ 
    ScriptExecutionEnvironment.LogTaskStarted("Cleaning solution outputs"); 

    solution.ForEachProject(
     delegate (VSProjectInfo projectInfo) 
      {    
       string projectOutputPath = GetProjectOutputPath(projectInfo.ProjectName); 

       if (projectOutputPath == null) 
        return; 

       projectOutputPath = Path.Combine(projectInfo.ProjectDirectoryPath, projectOutputPath); 

       DeleteDirectory(projectOutputPath, false); 

       string projectObjPath = String.Format(
        CultureInfo.InvariantCulture, 
        @"{0}\obj\{1}", 
        projectInfo.ProjectName, 
        buildConfiguration); 
       projectObjPath = Path.Combine(productRootDir, projectObjPath); 
       DeleteDirectory(projectObjPath, false); 
      }); 

    ScriptExecutionEnvironment.LogTaskFinished(); 
    return ReturnThisTRunner(); 
} 

public TRunner CompileSolution() 
{ 
    ScriptExecutionEnvironment.LogTaskStarted ("Compiling the solution"); 

    ProgramRunner 
     .AddArgument(MakePathFromRootDir(productId) + ".sln") 
     .AddArgument("/p:Configuration={0}", buildConfiguration) 
     .AddArgument("/p:Platform=Any CPU") 
     .AddArgument("/consoleloggerparameters:NoSummary") 
     .Run(@"C:\Windows\Microsoft.NET\Framework\v3.5\msbuild.exe"); 

    ScriptExecutionEnvironment.LogTaskFinished(); 
    return ReturnThisTRunner(); 
} 

당신은 여기의 나머지 찾을 수 있습니다 나는 아직 그것을 자신을 시도하지 않은 http://code.google.com/p/projectpilot/source/browse/trunk/Flubu/Builds/BuildRunner.cs

+0

재미있는 제안서 –

1

,하지만 마이크로 소프트는 비주얼 스튜디오 통합 갖고있는 것 같아요 NMAKE라는 만들기 구현이 있습니다

+0

아니요 - nmake는 오래되었으므로 수년 동안 사용되어 왔습니다. .NET Framework sDK 및 Windows SDK의 일부로 제공됩니다. 그러나 VS가 빌드에 사용하는 것은 아닙니다. Visual Studio에서는 msbuild를 사용합니다. 그것이 당신이 조사해야 할 것입니다. – Cheeso

3

한 가지 방법은 CMake을 사용하는 것입니다. 프로젝트를 어떻게 작성할지 스크립트로 설명하고 CMake는 Visual Studio 솔루션/프로젝트 파일을 생성합니다.

명령 줄 또는 지속적인 통합 도구에서 프로젝트를 빌드해야하는 경우 CMake를 사용하여 NMake 용 Makefile을 생성합니다.

프로젝트가 크로스 플랫폼 인 경우 - CMake를 실행하여 원하는 툴체인의 makefile을 생성 할 수 있습니다.

간단한 CMake 스크립트는 다음과 같습니다

project(hello) 
add_executable(hello hello.cpp) 

은 메이크 또는 방법으로 당신 설치 좋아하는 IDE에서 간단한 프로젝트로이 두 줄을 비교. 간단히 말해서 CMake에서

뿐만 아니라 크로스 플랫폼 그것은 또한 크로스 IDE 만드는 프로젝트를 구현시켜 않습니다. eclipse 나 KDevelop 또는 codeblocks로 프로젝트를 테스트하고 싶다면 CMake를 실행하여 해당 프로젝트 파일을 생성하십시오.

글쎄, 실제로는 항상 그렇게 쉬운 것은 아니지만 CMake의 아이디어는 막 흔들립니다.

예를 들어, Visual Studio에서 CMake를 사용하는 것을 고려해 보면 익숙한 VS 프로젝트 느낌을 얻으려면 약간의 조정이 필요합니다. 주된 장애물은 헤더와 소스 파일을 구성하는 것이지만 가능합니다. - CMake 위키를 확인하십시오. 짧은 스크립트를 작성하여이 작업을 단순화 할 수도 있습니다.)

1

VS2005 이후 Visual Studio는 "msbuild"를 사용하여 빌드를 정의하고 실행합니다. Visual Studio 디자이너의 프로젝트 설정을 조작 할 때 - XML ​​문서 생성을 켜거나 끄거나 새로운 종속성을 추가하거나 새 프로젝트 또는 어셈블리 참조를 추가한다고 가정 해 봅니다. Visual Studio는 .csproj (또는. vbproj, etc) 파일 (msbuild 파일)입니다.

이전의 Java 개미 또는 Nant와 마찬가지로 msbuild는 XML 스키마를 사용하여 프로젝트 및 빌드를 설명합니다. 이 명령은 "F6"빌드를 수행 할 때 VS에서 실행되며 VS를 열거 나 devenv.exe를 실행하지 않고도 명령 줄에서 실행할 수 있습니다.

따라서 자동 빌드 (동일한 빌드 및 동일한 프로젝트 구조)에 대해서는 VS 도구를 사용하여 개발 및 명령 행 msbuild를 사용하십시오.

+1

거의 - Visual Studio 2005 및 2009는 VB 및 C# 프로젝트에만 msbuild를 사용합니다. C 및 C++ 프로젝트는 여전히이 버전에서 이전 버전의 vcproj 엔진을 사용합니다. VS2010은 MSBuild for C++로 전환됩니다. 외부 메이크 파일에 대해 이야기하는 경우 C 또는 C++를 작성할 가능성이 있습니다. –

관련 문제