Command Line Build : VCBuild와 MSBuild 그리고 devenv
MindGear
저장소/VC++VS2008에서 C/C++ 프로젝트를 빌드할 때 vcbuild.exe를 사용했었는데 이거 VS2010부터 없어졌다 한다. 맘이 아푸다 ㅠㅠ
대신 MSBuild에서 C/C++ 프로젝트를 빌드 할 수 있다고 한다.
MSBuild는 C:\Windows\Microsoft.NET\Framework 아래 있다. 한참 찾았다.
근데 난 devenv.exe로 빌드하는 것도 편한 것 같다.
devenv에서 msbuild를 이용해 빌드한다고 하는데 devenv의 command line 명령어가 눈에 잘 들어온다.
명령어 구성은 다음과 같으니 종종 보자.
Visual Studio 2012 기준
사용법:
devenv [solutionfile | projectfile | anyfile.ext] [switches]
devenv의 첫째 인수는 일반적으로 솔루션 파일 또는 프로젝트 파일입니다.
다른 파일을 첫째 인수로 사용하면 편집기에서 해당 파일이
자동으로 열립니다. 프로젝트 파일을 입력하면 IDE는
프로젝트 파일의 부모 디렉터리에서 프로젝트 파일과
기본 이름이 같은 .sln 파일을 찾습니다. 그러한 .sln 파일이 없으면
IDE는 프로젝트를 참조하는 단일 .sln 파일을 찾습니다.
단일 .sln 파일도 없으면 IDE는 프로젝트 파일과 기본 이름이 같은 기본 .sln
파일 이름을 사용하여 저장되지 않은 솔루션을 만듭니다.
명령줄 빌드:
devenv solutionfile.sln /build [ solutionconfig ] [ /project projectnameorfile [ /projectconfig name ] ]
사용 가능한 명령줄 스위치:
/Build 지정한 솔루션 구성으로 솔루션이나 프로젝트를
빌드합니다. "Debug"를 예로 들 수 있습니다. 여러 플랫폼을
사용할 수 있으면 구성 이름에 플랫폼 이름을 명시하고
따옴표로 묶어야 합니다(예: "Debug|Win32").
/Clean 빌드 출력을 삭제합니다.
/Command IDE를 시작하고 명령을 실행합니다.
/Deploy 지정한 빌드 구성을 빌드하여 배포합니다.
/Edit 이 응용 프로그램의 실행 중인 인스턴스에서 지정한 파일을 엽니다.
실행 중인 인스턴스가 없으면 간단한 창 레이아웃을 사용하여 새
인스턴스를 시작합니다.
/LCID IDE에서 UI에 대한 기본 언어를 설정합니다.
/Log 문제 해결을 위해 IDE 동작을 지정한 파일에 로깅합니다.
/NoVSIP VSIP 테스트용 VSIP 개발자 라이선스 키를 사용할 수 없게 합니다.
/Out 빌드 로그를 지정한 파일에 추가합니다.
/Project 빌드, 정리 또는 배포할 프로젝트를 지정합니다.
/Build, /Rebuild, /Clean 또는 /Deploy와 함께 사용해야 합니다.
/ProjectConfig 솔루션 구성에 지정된 프로젝트 구성을
재정의합니다. "Debug"를 예로 들 수 있습니다. 여러 플랫폼을
사용할 수 있으면 구성 이름에 플랫폼 이름을 명시하고
따옴표로 묶어야 합니다(예: "Debug|Win32").
/Project와 함께 사용해야 합니다.
/Rebuild 지정한 구성으로 솔루션이나 프로젝트를
정리하고 빌드합니다.
/ResetAddin 지정된 추가 기능과 연결된 명령 및 명령 UI를 제거합니다.
/ResetSettings IDE의 기본 설정을 복원합니다. 필요한 경우 사용자가 지정한
VSSettings 파일로 다시 설정할 수 있습니다.
/ResetSkipPkgs VSPackages에 추가된 모든 SkipLoading 태그를 지웁니다.
/Run 지정한 솔루션을 컴파일하고 실행합니다.
/RunExit 지정한 솔루션을 컴파일하고 실행한 다음 IDE를 닫습니다.
/SafeMode 최소 창을 로드하는 안전 모드에서 IDE를 시작합니다.
/Upgrade 프로젝트 또는 솔루션과 그 안에 포함된 모든 프로젝트를 업그레이드합니다.
이러한 파일의 백업은 적절히 만들어집니다.
백업 프로세스에 대한 자세한 내용은 'Visual Studio 변환 마법사'
도움말을 참조하십시오.
제품별 스위치:
/debugexe 지정한 실행 파일을 디버깅하도록 엽니다.
명령줄의 나머지가 이 실행 파일에 인수로 전달됩니다.
/diff 두 파일을 비교합니다. 4개의 매개 변수가 필요합니다.
SourceFile, TargetFile, SourceDisplayName(선택 사항),
TargetDisplayName(선택 사항)
/TfsLink 팀 탐색기를 열고 입력한 아티팩트 URI에 대해
뷰어를 시작합니다(등록된 경우).
/useenv VC++ 빌드에 IDE 경로 대신
PATH, INCLUDE, LIBPATH 및 LIB 환경 변수를 사용합니다.
명령줄에서 디버거를 연결하려면 다음 명령을 사용하십시오.
VsJITDebugger.exe -p <pid>
Microsoft (R) Build Engine 버전 4.0.30319.17929
[Microsoft .NET Framework, 버전 4.0.30319.18034]
Copyright (C) Microsoft Corporation. All rights reserved.
구문: MSBuild.exe [options] [project file]
설명: 지정한 대상을 프로젝트 파일에 빌드합니다.
프로젝트 파일을 지정하지 않으면 MSBuild는 현재
작업 디렉터리에서 확장명이 "proj"로 끝나는 파일을
찾아서 사용합니다.
스위치:
/target:<targets> 지정한 대상을 이 프로젝트에 빌드합니다. 세미콜론 또는
쉼표를 사용하여 여러 대상을 구분하거나 각 대상을 따로
지정하십시오(약식: /t).
예:
/target:Resources;Compile
/property:<n>=<v> 지정한 프로젝트 수준 속성을 설정하거나 재정의합니다. 여기서
<n>은 속성 이름이고 <v>는 속성 값입니다. 세미콜론
또는 쉼표를 사용하여 여러 속성을 구분하거나
각 속성을 따로 지정하십시오(약식: /p).
예:
/property:WarningLevel=2;OutDir=bin\Debug\
/maxcpucount[:n] 빌드에 사용할 최대 동시 프로세스 수를
지정합니다. 스위치가 사용되지 않으면 기본값
1이 사용됩니다. 값 없이 스위치가 사용되면
컴퓨터에 있는 프로세서 수 이하로
사용됩니다(약식: /m[:n]).
/toolsversion:<version>
빌드 중 사용할 MSBuild 도구 집합(작업, 대상 등)
버전입니다. 이 버전은 개별 프로젝트에
지정된 버전을 재정의합니다(약식:
/tv).
예:
/toolsversion:3.5
/verbosity:<level> 지정한 양의 정보를 이벤트 로그에 표시합니다.
사용할 수 있는 자세한 정도는 q[uiet], m[inimal],
n[ormal], d[etailed] 및 diag[nostic]입니다(약식: /v).
예:
/verbosity:quiet
/consoleloggerparameters:<parameters>
콘솔 로거에 대한 매개 변수입니다(약식: /clp).
사용할 수 있는 매개 변수:
PerformanceSummary--작업, 대상 및 프로젝트에 소요된
시간을 표시합니다.
Summary--끝에 오류 및 경고 요약을 표시합니다.
NoSummary--끝에 오류 및 경고 요약을 표시하지
않습니다.
ErrorsOnly--오류만 표시합니다.
WarningsOnly--경고만 표시합니다.
NoItemAndPropertyList--각 프로젝트 빌드의 시작 부분에
항목 및 속성 목록을 표시하지 않습니다.
ShowCommandLine--TaskCommandLineEvent 메시지를 표시합니
다.
ShowTimestamp--모든 메시지의 접두사로 타임스탬프를
표시합니다.
ShowEventId--시작된 이벤트, 완료된 이벤트 및 메시지의
eventId를 표시합니다.
ForceNoAlign--콘솔 버퍼 크기에 텍스트를
정렬하지 않습니다.
DisableConsoleColor--모든 로깅 메시지에 기본
콘솔 색을 사용합니다.
DisableMPLogging-- 다중 프로세서가 아닌 모드에서 실행할 때
출력의 다중 프로세서 로깅 스타일을
사용하지 않습니다.
EnableMPLogging--다중 프로세서가 아닌 모드에서 실행할 때
도
다중 프로세서 로깅 스타일을
사용합니다. 이 로깅 스타일은 기본적으로 설정됩니다.
Verbosity--이 로거에 대한 /verbosity 설정을
재정의합니다.
예:
/consoleloggerparameters:PerformanceSummary;NoSummary;
Verbosity=minimal
/noconsolelogger 기본 콘솔 로거를 사용하지 않고 콘솔에 이벤트를
로깅하지 않습니다(약식: /noconlog).
/fileLogger[n] 빌드 출력을 파일에 로깅합니다. 기본적으로
파일은 현재 디렉터리에 있고 "msbuild[n].log"로 이름이 지정
되어
있습니다. 모든 노드의 이벤트는 단일 로그로 결합됩니다.
파일의 위치 및 fileLogger의
다른 매개 변수는 "/fileLoggerParameters[n]" 스위치를
추가하여 지정할 수 있습니다.
"n"은 1-9 사이의 숫자일 수 있으며 최대 10개의
파일 로거가 추가될 수 있습니다(약식: /fl[n]).
/fileloggerparameters[n]:<parameters>
파일 로거에 대한 추가 매개 변수를 제공합니다.
이 스위치가 있으면
해당 /filelogger[n] 스위치도 있습니다.
"n"은 1-9 사이의 숫자일 수 있습니다.
/fileloggerparameters는 모든 분산 파일 로거에도
사용할 수 있습니다. /distributedFileLogger의 설명을 참조하
십시오(약식:
/flp[n]).
콘솔 로거에 대해 나열된 것과 동일한 매개 변수를 사용할
수 있습니다. 사용할 수 있는 추가 매개 변수:
LogFile--빌드 로그를 기록할 로그 파일의
경로입니다.
Append--빌드 로그를 로그 파일에 추가할지 아니면
로그 파일을 덮어쓸지 결정합니다.
이 스위치를 설정하면 빌드 로그가 로그 파일에 추가됩
니다.
이 스위치를 설정하지 않으면
기존 로그 파일의 내용을 덮어씁니다.
기본값은 로그 파일에 추가하지 않는 것입니다.
Encoding--UTF-8, Unicode, ASCII과 같은
파일 인코딩을 지정합니다.
기본 자세한 정도는 Detailed입니다.
예:
/fileLoggerParameters:LogFile=MyLog.log;Append;
Verbosity=diagnostic;Encoding=UTF-8
/flp:Summary;Verbosity=minimal;LogFile=msbuild.sum
/flp1:warningsonly;logfile=msbuild.wrn
/flp2:errorsonly;logfile=msbuild.err
/distributedlogger:<central logger>*<forwarding logger>
이 로거를 사용하여 MSBuild에서 이벤트를 로깅하고 각 노드에
서로 다른 로거 인스턴스를 추가합니다. 로거를
여러 개 지정하려면 각 로거를 따로 지정하십시오(약식: /dl).
<logger> 구문:
[<logger class>,]<logger assembly>[;<logger parameters>]
<logger class> 구문:
[<partial or full namespace>.]<logger class name>
<logger assembly> 구문:
{<assembly name>[,<strong name>] | <assembly file>}
<logger parameters>는 선택적 요소이며, 입력한 그대로
로거에 전달됩니다(약식: /l).
예:
/dl:XMLLogger,MyLogger,Version=1.0.2,Culture=neutral
/dl:MyLogger,C:\My.dll*ForwardingLogger,C:\Logger.dll
/distributedFileLogger
빌드 출력을 여러 개의 로그 파일에
로깅합니다(MSBuild 노드당 로그 파일 하나씩). 이 파일의 초기
위치는
현재 디렉터리입니다. 기본적으로 이 파일의 이름은
"MSBuild<nodeid>.log"입니다. 파일의 위치 및
fileLogger의 다른 매개 변수는
"/fileLoggerParameters" 스위치를 추가하여 지정할 수 있습니
다.
fileLoggerParameters 스위치를 통해 로그 파일 이름이 설정되
면
분산 로거는 fileName을 템플릿으로 사용하고 이 fileName에
노드 ID를 추가하여 각 노드에 대한 로그 파일을
만듭니다.
/logger:<logger> 이 로거를 사용하여 MSBuild에서 이벤트를 로깅합니다.
로거를 여러 개 지정하려면 각 로거를 따로 지정하십시오.
<logger> 구문:
[<logger class>,]<logger assembly>[;<logger parameters>]
<logger class> 구문:
[<partial or full namespace>.]<logger class name>
<logger assembly> 구문:
{<assembly name>[,<strong name>] | <assembly file>}
<logger parameters>는 선택적 요소이며, 입력한 그대로
로거로 전달됩니다(약식: /l).
예:
/logger:XMLLogger,MyLogger,Version=1.0.2,Culture=neutral
/logger:XMLLogger,C:\Loggers\MyLogger.dll;OutputAsHTML
/validate 기본 스키마에 대해 프로젝트의 유효성을 검사합니다(약식:
/val).
/validate:<schema> 지정한 스키마에 대해 프로젝트의 유효성을 검사합니다(약식:
/val).
예:
/validate:MyExtendedBuildSchema.xsd
/ignoreprojectextensions:<extensions>
빌드할 프로젝트 파일을 결정할 때 무시할
확장명의 목록입니다. 세미콜론 또는 쉼표를 사용하여
여러 확장명을 구분하십시오.
(약식: /ignore)
예:
/ignoreprojectextensions:.sln
/nodeReuse:<parameters>
MSBuild 노드를 다시 사용하도록 설정하거나 해제합니다.
매개 변수:
True --빌드가 완료된 후 노드가 남아 있으며
이 노드는 이후 빌드에 다시 사용됩니다(기본값).
False--빌드가 완료된 후 노드가 남아 있지 않습니다(약식:
/nr).
예:
/nr:true
/preprocess[:file]
빌드 중에 가져온 모든 파일에
해당 경계를 표시하여 인라인 처리하면 집계된
단일 프로젝트 파일을 만들 수 있습니다. 이렇게 하면
가져오고 있는 파일, 파일을 가져온 위치
및 해당 파일이 빌드에 제공하는 사항을 이해하는 데
도움이 됩니다. 기본적으로 출력은
콘솔 창에 작성됩니다. 출력 파일에 대한 경로가
제공되면 해당 경로가 대신 사용됩니다.
(약식: /pp)
예:
/pp:out.txt
/detailedsummary
빌드 마지막에 구성 상태 및
노드에 대한 해당 구성의 예약 상태와 관련한
자세한 정보를 표시합니다.
(약식: /ds)
@<file> 텍스트 파일에서 명령줄 설정을 삽입합니다. 지시
파일을 여러 개 지정하려면 각 지시 파일을 따로
지정하십시오.
"msbuild.rsp"라는 지시 파일은 다음 위치에서
자동으로 사용됩니다.
(1) msbuild.exe 디렉터리
(2) 빌드된 첫 번째 프로젝트 또는 솔루션 디렉터리
/noautoresponse MSBuild.rsp 파일을 자동으로 포함하지 않습니다(약식:
/noautorsp).
/nologo 시작 배너 및 저작권 메시지를 표시하지 않습니다.
/version 버전 정보만 표시합니다(약식: /ver).
/help 사용법 메시지를 표시합니다(약식: /? 또는 /h).
예:
MSBuild MyApp.sln /t:Rebuild /p:Configuration=Release
MSBuild MyApp.csproj /t:Clean
/p:Configuration=Debug;TargetFrameworkVersion=v3.5
'저장소 > VC++' 카테고리의 다른 글
boost library build for windows (0) | 2013.05.20 |
---|---|
WinHTTP Equivalents to WinINet Functions (0) | 2013.04.17 |
Visual Studio 원격 디버깅(Remote Debugger) (0) | 2013.03.28 |
네트워크 프로그래밍 할 때 종종 보는 에러들 정리 (0) | 2013.03.20 |
TortoiseSVN(Diff, Log, Blame)과 Visual Studio 통합 방법 (0) | 2013.03.19 |