방법: 동일한 소스 파일을 다른 옵션을 사용하여 빌드How to: Build the Same Source Files with Different Options

프로젝트를 빌드할 때 같은 구성 요소를 서로 다른 빌드 옵션으로 자주 컴파일하게 됩니다.When you build projects, you frequently compile the same components with different build options. 예를 들어 기호 정보가 포함된 디버그 빌드를 만들거나 기호 정보가 없지만 최적화가 사용하도록 설정된 릴리스 빌드를 만들 수 있습니다.For example, you can create a debug build with symbol information or a release build with no symbol information but with optimizations enabled. x86 또는 x64x64 등의 특정 플랫폼에서 실행되는 프로젝트를 빌드할 수도 있습니다.Or you can build a project to run on a specific platform, such as x86 or x64x64. 이러한 모든 경우에 대부분의 빌드 옵션은 동일하게 유지되고, 빌드 구성을 제어하기 위해 몇 가지 옵션만 변경됩니다.In all these cases, most of the build options stay the same; only a few options are changed to control the build configuration. MSBuildMSBuild를 통해 속성과 조건을 사용하여 다양한 빌드 구성을 만듭니다.With MSBuildMSBuild, you use properties and conditions to create the different build configurations.

속성을 사용하여 프로젝트 수정Using Properties to Modify Projects

Property 요소는 임시 디렉터리의 위치와 같이 프로젝트 파일에서 여러 번 참조되는 변수를 정의하고 디버그 빌드 및 릴리스 빌드 등의 여러 구성에서 사용되는 속성 값을 설정합니다.The Property element defines a variable that is referenced several times in a project file, such as the location of a temporary directory, or to set the values for properties that are used in several configurations, such as a Debug build and a Release build. 속성에 대한 자세한 내용은 MSBuild 속성을 참조하세요.For more information about properties, see MSBuild Properties.

속성을 사용하면 프로젝트 파일을 변경할 필요 없이 빌드의 구성을 변경할 수 있습니다.You can use properties to change the configuration of your build without having to change the project file. Property 요소 및 PropertyGroup 요소의 Condition 특성을 사용하여 속성 값을 변경할 수 있습니다.The Condition attribute of the Property element and the PropertyGroup element allows you to change the value of properties. MSBuildMSBuild 조건에 대한 자세한 내용은 조건을 참조하세요.For more information about MSBuildMSBuild conditions, see Conditions.

또 다른 속성을 기반으로 속성 그룹을 설정하려면To set a group of properties based on another property

  • 다음과 같은 PropertyGroup 요소의 Condition 특성을 사용합니다.Use a Condition attribute in a PropertyGroup element similar to the following:

    <PropertyGroup Condition="'$(Flavor)'=='DEBUG'">  
        <DebugType>full</DebugType>  
        <Optimize>no</Optimize>  
    </PropertyGroup>  
    

또 다른 속성을 기반으로 속성을 정의하려면To define a property based on another property

  • 다음과 같은 Property 요소의 Condition 특성을 사용합니다.Use a Condition attribute in a Property element similar to the following:

    <DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>  
    

명령줄에서 속성 지정Specifying Properties on the Command Line

프로젝트 파일이 여러 구성을 허용하도록 작성되면 프로젝트를 빌드할 때마다 해당 구성을 변경하는 기능을 포함해야 합니다.Once your project file is written to accept multiple configurations, you need to have the ability to change those configurations whenever you build your project. MSBuildMSBuild/property 또는 /p 스위치를 사용하여 명령줄에서 속성을 지정할 수 있게 하는 방식으로 이 기능을 제공합니다. provides this ability by allowing properties to be specified on the command line using the /property or /p switch.

명령줄에서 프로젝트 속성을 설정하려면To set a project property at the command line

  • /property 스위치와 속성 및 속성 값을 함께 사용합니다.Use the /property switch with the property and property value. 예:For example:

    msbuild file.proj /property:Flavor=Debug  
    
    • 또는or -
    Msbuild file.proj /p:Flavor=Debug  
    

명령줄에서 둘 이상의 프로젝트 속성을 지정하려면To specify more than one project property at the command line

  • /property 또는 /p 스위치와 속성 및 속성 값을 함께 여러 번 사용하거나, 하나의 /property 또는 /p 스위치와 세미콜론(;)으로 구분된 여러 속성을 사용합니다.Use the /property or /p switch multiple times with the property and property values, or use one /property or /p switch and separate multiple properties with semicolons (;). 예:For example:

    msbuild file.proj /p:Flavor=Debug;Platform=x86  
    
    • 또는-or-
    msbuild file.proj /p:Flavor=Debug /p:Platform=x86  
    

    환경 변수는 속성으로 처리되고 MSBuildMSBuild에 의해 자동으로 통합되기도 합니다.Environment variables are also treated as properties and are automatically incorporated by MSBuildMSBuild. 환경 변수 사용에 대한 자세한 내용은 방법: 빌드 시 환경 변수 사용을 참조하세요.For more information about using environment variables, see How to: Use Environment Variables in a Build.

    명령 줄에서 지정된 속성 값이 프로젝트 파일에서 같은 속성에 설정된 모든 값보다 우선 적용되고 프로젝트 파일의 값이 환경 변수의 값보다 우선 적용됩니다.The property value that is specified on the command line takes precedence over any value that is set for the same property in the project file, and that value in the project file takes precedence over the value in an environment variable.

    프로젝트 태그에서 TreatAsLocalProperty 특성을 사용하여 이 동작을 변경할 수 있습니다.You can change this behavior by using the TreatAsLocalProperty attribute in a project tag. 해당 특성을 통해 나열된 속성 이름의 경우 명령줄에서 지정된 속성 값이 프로젝트 파일의 값보다 우선 적용되지 않습니다.For property names that are listed with that attribute, the property value that's specified on the command line doesn't take precedence over the value in the project file. 이 항목의 뒷부분에 있는 예제를 참조하세요.You can find an example later in this topic.

예제Example

다음 코드 예제 "Hello World" 프로젝트에는 디버그 빌드 및 릴리스 빌드를 만드는 데 사용할 수 있는 새로운 두 가지 속성 그룹이 포함됩니다.The following code example, the "Hello World" project, contains two new property groups that can be used to create a Debug build and a Release build.

이 프로젝트의 디버그 버전을 빌드하려면 다음을 입력합니다.To build the debug version of this project, type:

msbuild consolehwcs1.proj /p:flavor=debug  

이 프로젝트의 일반 정품 버전을 빌드하려면 다음을 입력합니다.To build the retail version of this project, type:

msbuild consolehwcs1.proj /p:flavor=retail  
<Project DefaultTargets = "Compile"  
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  

    <!-- Sets the default flavor of an environment variable called   
    Flavor is not set or specified on the command line -->  
    <PropertyGroup>  
        <Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>  
    </PropertyGroup>  

    <!-- Define the DEBUG settings -->  
    <PropertyGroup Condition="'$(Flavor)'=='DEBUG'">  
        <DebugType>full</DebugType>  
        <Optimize>no</Optimize>  
    </PropertyGroup>  

    <!-- Define the RETAIL settings -->  
    <PropertyGroup Condition="'$(Flavor)'=='RETAIL'">  
        <DebugType>pdbonly</DebugType>  
        <Optimize>yes</Optimize>  
    </PropertyGroup>  

    <!-- Set the application name as a property -->  
    <PropertyGroup>  
        <appname>HelloWorldCS</appname>  
    </PropertyGroup>  

    <!-- Specify the inputs by type and file name -->  
    <ItemGroup>  
        <CSFile Include = "consolehwcs1.cs"/>  
    </ItemGroup>  

    <Target Name = "Compile">  
        <!-- Run the Visual C# compilation using input files  
        of type CSFile -->  
        <CSC  Sources = "@(CSFile)"  
            DebugType="$(DebugType)"  
            Optimize="$(Optimize)"  
            OutputAssembly="$(appname).exe" >  

            <!-- Set the OutputAssembly attribute of the CSC  
            task to the name of the executable file that is   
            created -->  
            <Output TaskParameter="OutputAssembly"  
                ItemName = "EXEFile" />  
        </CSC>  
        <!-- Log the file name of the output file -->  
        <Message Text="The output file is @(EXEFile)"/>  
    </Target>  
</Project>  

예제Example

다음 예제에서는 TreatAsLocalProperty 특성을 사용하는 방법을 보여 줍니다.The following example illustrates how to use the TreatAsLocalProperty attribute. Color 속성에는 프로젝트 파일의 Blue 값 및 명령줄의 Green 값이 포함됩니다.The Color property has a value of Blue in the project file and Green in the command line. 프로젝트 태그의 TreatAsLocalProperty="Color"를 사용하면 명령줄 속성(Green)이 프로젝트 파일에 정의된 속성(Blue)을 재정의하지 않습니다.With TreatAsLocalProperty="Color" in the project tag, the command-line property (Green) doesn't override the property that's defined in the project file (Blue).

프로젝트를 빌드하려면 다음 명령을 입력합니다.To build the project, enter the following command:

msbuild colortest.proj /t:go /property:Color=Green  
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"  
ToolsVersion="4.0" TreatAsLocalProperty="Color">  

    <PropertyGroup>  
        <Color>Blue</Color>  
    </PropertyGroup>  

    <Target Name="go">  
        <Message Text="Color: $(Color)" />  
    </Target>  
</Project>  

<!--  
  Output with TreatAsLocalProperty="Color" in project tag:  
     Color: Blue  

  Output without TreatAsLocalProperty="Color" in project tag:  
     Color: Green  
-->  

참고 항목See Also

MSBuildMSBuild
MSBuild 개념 MSBuild Concepts
MSBuild 참조 MSBuild Reference
Project 요소(MSBuild)Project Element (MSBuild)