대상 빌드 순서Target Build Order

단일 대상에 대한 입력이 다른 대상의 출력을 사용하는 경우에는 대상의 순서를 지정해야 합니다.Targets must be ordered if the input to one target depends on the output of another target. 다음과 같은 특성을 사용하여 대상이 실행되는 순서를 지정할 수 있습니다.You can use these attributes to specify the order in which targets are run:

  • InitialTargets.InitialTargets. Project 특성은 대상이 명령줄 또는 DefaultTargets 특성에 지정되어 있더라도 처음으로 실행할 대상을 지정합니다.This Project attribute specifies the targets that will run first, even if targets are specified on the command line or in the DefaultTargets attribute.

  • DefaultTargets.DefaultTargets. Project 특성은 대상이 명령줄에 명시적으로 지정되어 있지 않은 경우 실행할 대상을 지정합니다.This Project atttribute specifies which targets are run if a target is not specified explicitly on the command line.

  • DependsOnTargets.DependsOnTargets. Target 특성은 이 대상을 실행하려면 먼저 실행해야 하는 대상을 지정합니다.This Target attribute specifies targets that must run before this target can run.

  • BeforeTargetsAfterTargets을 참조하세요.BeforeTargets and AfterTargets. 이러한 Target 특성은 지정된 대상 전이나 후에 이 대상을 실행해야 하도록 지정합니다(MSBuild 4.0).These Target attributes specify that this target should run before or after the specified targets (MSBuild 4.0).

    대상은 빌드의 후속 대상이 종속되더라도 빌드 중에 두 번 실행되지 않습니다.A target is never run twice during a build, even if a subsequent target in the build depends on it. 대상이 실행되고 나면 빌드 내에서 해당 대상의 역할은 완료됩니다.Once a target has been run, its contribution to the build is complete.

    대상은 Condition 특성을 포함할 수 있습니다.Targets may have a Condition attribute. 지정된 조건이 false로 평가되면 대상은 실행되지 않으며 빌드에 영향을 주지 않습니다.If the specified condition evaluates to false, the target isn't executed and has no effect on the build. 조건에 대한 자세한 내용은 조건을 참조하세요.For more information about conditions, see Conditions.

초기 대상Initial Targets

Project 요소의 InitialTargets 특성은 대상이 명령줄 또는 DefaultTargets 특성에 지정되어 있더라도 처음으로 실행할 대상을 지정합니다.The InitialTargets attribute of the Project element specifies targets that will run first, even if targets are specified on the command line or in the DefaultTargets attribute. 초기 대상은 대개 오류 검사용으로 사용됩니다.Initial targets are typically used for error checking.

InitialTargets 특성의 값은 세미콜론으로 구분되어 순서가 지정된 대상 목록일 수 있습니다.The value of the InitialTargets attribute can be a semicolon-delimited, ordered list of targets. 다음 예제에서는 Warm 대상이 실행된 후에 Eject 대상이 실행됨을 지정합니다.The following example specifies that the Warm target runs, and then the Eject target runs.

<Project InitialTargets="Warm;Eject" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  

가져온 프로젝트의 경우 자체 InitialTargets 특성이 있을 수 있습니다.Imported projects may have their own InitialTargets attributes. 모든 초기 대상은 함께 집계되어 순서대로 실행됩니다.All initial targets are aggregated together and run in order.

자세한 내용은 방법: 먼저 빌드할 대상 지정을 참조하세요.For more information, see How to: Specify Which Target to Build First.

기본 대상Default Targets

Project 요소의 DefaultTargets 특성은 대상이 명령줄에 명시적으로 지정되어 있지 않은 경우 빌드할 하나 이상의 대상을 지정합니다.The DefaultTargets attribute of the Project element specifies which target or targets are built if a target isn't specified explicitly in a command line.

DefaultTargets 특성의 값은 세미콜론으로 구분되어 순서가 지정된 기본 대상 목록일 수 있습니다.The value of the DefaultTargets attribute can be a semicolon-delimited, ordered list of default targets. 다음 예제에서는 Clean 대상이 실행된 후에 Build 대상이 실행됨을 지정합니다.The following example specifies that the Clean target runs, and then the Build target runs.

<Project DefaultTargets="Clean;Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  

명령줄에서 /target 스위치를 사용하여 기본 대상을 재정의할 수 있습니다.You can override the default targets by using the /target switch on the command line. 다음 예제에서는 Build 대상이 실행된 후에 Report 대상이 실행됨을 지정합니다.The following example specifies that the Build target runs, and then the Report target runs. 이 방식으로 대상을 지정하면 기본 대상은 무시됩니다.When you specify targets in this way, any default targets are ignored.

msbuild /target:Build;Report

초기 대상과 기본 대상을 모두 지정하고 명령줄 대상은 지정하지 않는 경우 MSBuild는 초기 대상을 먼저 실행한 후에 기본 대상을 실행합니다.If both initial targets and default targets are specified, and if no command-line targets are specified, MSBuild runs the initial targets first, and then runs the default targets.

가져온 프로젝트의 경우 자체 DefaultTargets 특성이 있을 수 있습니다.Imported projects may have their own DefaultTargets attributes. 처음으로 나오는 DefaultTargets 특성에 따라 실행될 기본 대상이 결정됩니다.The first DefaultTargets attribute encountered determines which default targets will run.

자세한 내용은 방법: 먼저 빌드할 대상 지정을 참조하세요.For more information, see How to: Specify Which Target to Build First.

첫 번째 대상First Target

초기 대상, 기본 대상 또는 명령줄 대상이 없으면 MSBuild는 프로젝트 파일이나 가져온 프로젝트 파일에서 처음으로 나오는 대상을 실행합니다.If there are no initial targets, default targets, or command-line targets, then MSBuild runs the first target it encounters in the project file or any imported project files.

대상 종속성Target Dependencies

대상은 상호 간의 종속 관계를 설명할 수 있습니다.Targets can describe dependency relationships with each other. DependsOnTargets 특성은 대상이 다른 대상에 종속됨을 나타냅니다.The DependsOnTargets attribute indicates that a target depends on other targets. 예를 들어 개체에 적용된For example,

<Target Name="Serve" DependsOnTargets="Chop;Cook" />  

위의 코드는 Serve 대상이 Chop 대상과 Cook 대상에 종속됨을 지시합니다.tells MSBuild that the Serve target depends on the Chop target and the Cook target. MSBuild는 Chop 대상, Cook 대상, Serve 대상을 순서대로 실행합니다.MSBuild runs the Chop target, and then runs the Cook target before it runs the Serve target.

이전 대상 및 이후 대상BeforeTargets and After Targets

MSBuild 4.0에서는 BeforeTargetsAfterTargets 특성을 사용하여 대상 순서를 지정할 수 있습니다.In MSBuild 4.0, you can specify target order by using the BeforeTargets and AfterTargets attributes.

다음 스크립트를 고려해 보세요.Consider the following script.

<Project DefaultTargets="Compile;Link" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
    <Target Name="Compile">  
        <Message Text="Compiling" />  
    </Target>  
    <Target Name="Link">  
        <Message Text="Linking" />  
    </Target>  
</Project>  

Compile 대상이 실행된 이후 Link 대상이 실행되기 전에 실행되는 중간 대상 Optimize를 만들려면 Project 요소의 아무 위치에나 다음 대상을 추가합니다.To create an intermediate target Optimize that runs after the Compile target, but before the Link target, add the following target anywhere in the Project element.

<Target Name="Optimize"   
    AfterTargets="Compile" BeforeTargets="Link">  
    <Message Text="Optimizing" />  
</Target>  

대상 빌드 순서 결정Determining the Target Build Order

MSBuild는 다음처럼 대상 빌드 순서를 결정합니다.MSBuild determines the target build order as follows:

  1. InitialTargets 대상이 실행됩니다.InitialTargets targets are run.

  2. /target 스위치를 통해 명령줄에 지정된 대상이 실행됩니다.Targets specified on the command line by the /target switch are run. 명령줄에서 대상을 지정하지 않으면 DefaultTargets 대상이 실행됩니다.If you specify no targets on the command line, then the DefaultTargets targets are run. 이 두 대상이 모두 없으면 처음으로 나오는 대상이 실행됩니다.If neither is present, then the first target encountered is run.

  3. 대상의 Condition 특성을 평가합니다.The Condition attribute of the target is evaluated. Condition 특성이 있고 false로 평가되는 경우 대상은 실행되지 않으며 빌드에 영향을 주지 않습니다.If the Condition attribute is present and evaluates to false, the target isn't executed and has no further effect on the build.

  4. 대상이 실행되기 전에 DependsOnTargets 대상이 실행됩니다.Before a target is executed, its DependsOnTargets targets are run.

  5. 대상이 실행되기 전에 BeforeTargets 특성에 해당 대상이 나열되어 있는 모든 대상이 실행됩니다.Before a target is executed, any target that lists it in a BeforeTargets attribute is run.

  6. 대상이 실행되기 전에 Inputs 특성 및 Outputs 특성을 비교합니다.Before a target is executed, its Inputs attribute and Outputs attribute are compared. MSBuild는 해당하는 하나 이상의 입력 파일과 관련하여 출력 파일이 오래된 것으로 확인되면 대상을 실행합니다.If MSBuild determines that any output files are out of date with respect to the corresponding input file or files, then MSBuild executes the target. 그렇지 않으면 MSBuild는 대상을 건너뜁니다.Otherwise, MSBuild skips the target.

  7. 대상을 실행하거나 건너뛴 후에는 AfterTargets 특성에 해당 대상이 나열되어 있는 모든 대상이 실행됩니다.After a target is executed or skipped, any target that lists it in an AfterTargets attribute is run.

참고 항목See Also

대상Targets