빌드 도구 란 무엇입니까?


130

지난 4 년 동안 Eclipse (Java) 및 Visual Studio Express (C #)를 사용하여 프로그래밍했습니다. 언급 된 IDE는 항상 프로그래머가 요청할 수있는 모든 시설을 제공하는 것처럼 보였다 (물론 프로그래밍과 관련됨).

최근에 나는 "빌드 툴"이라는 것을 들었습니다. 나는 그들이 거의 모든 종류의 실제 세계 개발에 사용된다고 들었습니다. 그들은 정확히 무엇입니까? 그들은 어떤 문제를 해결하기 위해 고안 되었습니까? 지난 4 년 동안 어떻게 필요하지 않았습니까? 그것들은 일종의 명령 줄로 IDE를 제거합니까?

답변:


117

빌드 도구 란 무엇입니까?

빌드 도구는 소스 코드에서 실행 가능한 응용 프로그램 (예 : .apk for android app)을 자동으로 만드는 프로그램입니다. Building은 코드를 컴파일, 링크 및 패키징하여 사용 가능하거나 실행 가능한 형태로 통합합니다.

기본적으로 빌드 자동화는 소프트웨어 개발자가 다음과 같은 일상 활동에서 수행하는 다양한 작업을 스크립팅하거나 자동화하는 작업입니다.

  1. 의존성 다운로드.
  2. 소스 코드를 이진 코드로 컴파일
  3. 이진 코드를 패키징합니다.
  4. 테스트 실행
  5. 프로덕션 시스템에 배포

빌드 도구 또는 빌드 자동화를 사용하는 이유는 무엇입니까?

소규모 프로젝트에서는 개발자가 빌드 프로세스를 수동으로 호출하는 경우가 많습니다. 이는 구축해야 할 대상, 순서 및 종속성을 추적하기가 어려운 대규모 프로젝트에는 실용적이지 않습니다. 자동화 도구를 사용하면 빌드 프로세스의 일관성을 높일 수 있습니다.

다양한 빌드 도구 사용 가능 (네이밍 만 가능) :

  1. Java의 경우-Ant, Maven, Gradle.
  2. .NET 프레임 워크-NAnt
  3. c #-MsBuild.

자세한 내용은 다음 링크를 참조하십시오.

1. 자동화 구축

2. 빌드 자동화 소프트웨어 목록

감사.


17

빌드 도구는 빌드를 관리하고 구성하는 도구이며, 특히 프로젝트가 서로 연결된 경우 많은 프로젝트가있는 환경에서 매우 중요합니다. 그들은 다양한 사람들이 다양한 프로젝트를 수행하는 곳에서는 아무것도 깨뜨리지 않도록합니다. 그리고 변경을 할 때도 아무런 변화가 없는지 확인하십시오.

이전에 들어 보지 못한 이유는 이전에 상업 환경에서 일하지 않았기 때문입니다. 상용 소프트웨어 환경에서 특히 소프트웨어 하우스에서 작업하는 경우 발생할 수있는 많은 것들이 있습니다.

다른 사람들이 말했듯이, 당신은 그것들을 사용하고 있지만, 당신은 아마 일반적인 상업적 작업 방식과 다른 방식으로 일하고 있었기 때문에 그것들을 고려할 필요가 없었습니다.


10

빌드 도구는 일반적으로 명령 줄에서 IDE 내부에서 또는 완전히 분리되어 실행됩니다.

아이디어는 코드 컴파일 및 패키징 작업을 생성, 디버깅 등으로부터 분리하는 것입니다.

빌드 도구는 명령 또는 IDE 내에서 실행할 수 있으며 둘 다 사용자가 트리거합니다. 리포지토리와 깨끗한 빌드 머신에서 코드를 확인한 후 지속적인 통합 도구로 사용할 수도 있습니다.

make는 C / C ++ 구축을 위해 * nix 환경에서 사용 된 초기 명령 도구였습니다.

Java 개발자로서 가장 널리 사용되는 빌드 도구는 Ant 및 Maven입니다. 둘 다 IntelliJ, Eclipse 또는 NetBeans와 같은 IDE에서 실행될 수 있습니다. Cruise Control 또는 Hudson과 같은 지속적인 통합 도구로도 사용할 수 있습니다.


6
이제 Gradle도 널리 사용됩니다
asura

내가 앉아있는 곳이 아닙니다. Gradle을 몰랐으므로 참조 해 주셔서 감사합니다.
duffymo 2016 년

@duffymo 마지막 줄에 자세히 설명해 주시겠습니까? 지속적인 통합이란 무엇입니까? 그것들은 빌드 도구와 어떤 관련이 있습니까?
Quazi Irfan

4

빌드 도구는 일반적으로 소스 코드를 바이너리로 변환하는 것입니다. 소스 코드를 구성하고, 컴파일 플래그를 설정하고, 종속성을 관리합니다. 일부 도구는 단위 테스트 실행, 정적 분석, 문서 생성과도 통합됩니다.

Eclipse 또는 Visual Studio는 빌드 시스템이지만 더 많은 IDE이며 Visual Studio의 경우 Visual Studio 프로젝트 파일을 구문 분석하는 기본 msbuild입니다.

모든 빌드 시스템의 기원은 유명한 'make'처럼 보입니다.

다른 언어를위한 빌드 시스템이 있습니다 :

  1. C ++ : make, cmake, premake
  2. 자바 : ant + ivy, maven, gradle
  3. C # : msbuild

일반적으로 적절한 도메인 특정 언어 (make, cmake) 또는 xml (ant, maven, msbuild)을 사용하여 빌드를 지정하여 시스템을 빌드하십시오. 현재 트렌드는 실제 스크립팅 언어를 사용하여 프리 메이크 용 루아, 그레 비용 그루비와 같은 빌드 스크립트를 작성하고 있습니다. API (빌드 DSL).


1

빌드 프로세스는 일부 빌드 도구를 사용하여 오류에 대해 소스 코드를 컴파일하고 빌드 (프로젝트의 실행 가능한 버전)를 만드는 프로세스입니다. 우리 (주로 개발자)는 소스 코드를 수정하고 빌드 프로세스가 발생하도록 해당 코드를 체크인합니다. 빌드 프로세스 후 두 가지 결과가 나타납니다. 1. PASSES를 빌드하고 프로젝트의 실행 버전을 얻습니다 (빌드 준비 완료). 2. 실패하고 특정 오류가 발생하고 빌드가 작성되지 않습니다.

다음과 같은 다양한 빌드 프로세스 유형이 있습니다. 1. 야간 빌드 2. 게이트 빌드 3. 지속적인 통합 빌드 등

빌드 도구는 빌드 작성 프로세스를 도와주고 자동화합니다.

* So in Short Build는 개발자 또는 개발 팀이 제품을 지속적으로 모니터링하고 개발 프로세스 중 조기에 문제를 해결함으로써 제품의 최종 결과에 대한 확신을 얻기 위해 사용하는 시험판 형식의 소프트웨어 버전입니다. *


Nightly, Gated 및 Continuous Integration 빌드에 대해 조금 더 말씀해 주시겠습니까?
Quazi Irfan

@iamcreasy 다른 빌드에 대한 설명을 위해 귀하의 질문과 관련하여 다른 답변을 추가했습니다. 아래에서 해당 설명을 찾을 수 있습니다. 또한 빌드 프로세스를 더 잘 이해하는 데 도움이되는 링크도 추가했습니다.
Prakash

1

이들은 빌드를 수행 할 수있는 다양한 유형의 프로세스입니다.

1. 지속적인 통합 빌드 :이 코드에서 개발자는 주로 코드를 체크인하고 체크인 직후에 최근 변경 사항을 빌드하기 위해 빌드를 시작하므로 체크인 한 직후에 개발자가 수행 한 변경 사항이 작동했는지 여부를 알아야합니다. 소규모 프로젝트 나 프로젝트 구성 요소에 적합합니다. 여러 팀이 프로젝트와 연관되거나 큰 팀이없는 경우. 동일한 시나리오에서 작업하는 개발자의 경우이 시나리오는 '아니요'인 것처럼 처리하기가 어렵습니다. 특정 지점에서 체크인 및 빌드가 실패하는 경우 하나의 문제로 인해 또는 여러 문제로 인해 모든 손상이 발생했는지 여부를 추적하기가 매우 어려워 지므로 이전 문제가 올바르게 해결되지 않으면 나중에 추적하기가 매우 어려워집니다 변경 후 발생한 결함.

2. 게이트 체크인 빌드 : 이 유형의 빌드에서 체크인은 쉘 세트의 변경 사항을 유지하면서 체크인 직후에 시작됩니다. 이 경우 선반 세트 체크인보다 커밋이 성공하면 Team Foundation Server에 커밋되지 않습니다. 이것은 성공적인 체크인 만 가능하기 때문에 지속적인 통합 빌드에서 약간 더 나은 그림을 제공합니다.

3. 야간 빌드 : 예약 빌드라고도합니다. 이 경우 변경 사항을 빌드하기 위해 빌드가 특정 시간 동안 실행되도록 예약합니다. 마지막 빌드에서 커밋되지 않은 모든 이전 변경 사항은이 빌드 프로세스 동안 빌드됩니다. 이것은 여러 번 체크인하고 싶지만 코드를 체크인 할 때마다 빌드를 원하지 않기 때문에 체크인 된 코드를 빌드하기 위해 빌드를 시작할 수있는 고정 된 시간 또는 기간을 가질 수 있습니다.

이러한 빌드에 대한 자세한 내용은 아래 위치에서 찾을 수 있습니다.

빌드에서 게이트 체크

지속적인 통합 빌드

야간 빌드


0

당신은 그것들을 사용하고 있습니다-IDE는 빌드 도구입니다. 명령 행에는 다음과 같은 것을 사용할 수 있습니다 make.

사람들은 야간 빌드와 같은 작업을 위해 명령 줄 도구를 사용합니다. 따라서 숙취가있는 아침에 프로그래머는 최신 라이브러리 빌드로 처리하던 코드가 작동하지 않는다는 것을 깨달았습니다!


11
일반적으로 IDE는 빌드 도구 가 아니며 빌드 도구와 통합 / 호출됩니다. 예를 들어 Visual Studio normaly는 MSBuild를 호출합니다.
저스틴

-1

"... 구축해야 할 내용을 추적하기가 매우 어렵습니다."-빌드 도구가이 모든 것에 도움이되지 않습니다. 무엇을 만들고 싶은지 알아야합니다. (Ritesh Gun의 답변에서 인용)

"그들이 거의 모든 종류의 실제 개발에 사용된다고 들었습니다."-어떤 이유로 소프트웨어 개발자들은 대기업에서 일하는 것을 좋아합니다. 그들은 그곳에서 일하는 모든 개인에 대해 더 분명한 업무 지침을 가지고있는 것 같습니다.

"지난 4 년 동안 어떻게 필요하지 않았을까?" 아마도 당신은 숙련 된 프로그래머이기 때문일 것입니다.

의사, 메타. 빌드 툴은 실제로 실질적인 이점을 제공하지는 않는다고 생각합니다. 나쁜 회사 관행, 방향 부족-프로젝트에 대한 실제 지식 부족으로 이어지는 소프트웨어 아키텍처 리더십이 잘못되어 발생하는 보안 감각을 추가하는 것입니다. 프로젝트에서 빌드 도구 (테스트 용)를 사용할 필요는 없습니다. 소프트웨어 프로젝트에 대한 지식이 부족한 상태에서 무작위 테스트를 수행한다고해서 전혀 도움이되지는 않습니다.

프로젝트의 목적과 다른 구성 요소와의 작동 방식을 모른 채 프로젝트에 무언가를 추가해서는 안됩니다. 구성 요소는 기능적으로 분리 될 수 있지만 함께 작동하지는 않습니다. (이것은 내가 생각하는 소프트웨어 아키텍트의 책임입니다).

4-5 개의 컴포넌트가 프로젝트에 추가되면 어떻게됩니까? 6 번째 구성 요소를 추가합니다. 첫 번째로 추가 된 구성 요소와 함께 모든 것을 망칠 수 있습니다. 자동 감지가 도움이되지 않습니다.

생각하는 것 이외의 지름길은 없습니다.

그런 다음 리포지토리에서 자동 다운로드됩니다. 왜 그렇게하고 싶습니까? 다운로드 한 내용, 프로젝트에 추가 한 내용을 알아야합니다. 리포지토리 버전의 변경 사항을 어떻게 감지합니까? 넌 알아야 해. 아무것도 "자동"할 수 없습니다.

만약 우리가 자전거와 유모차를 시험하기 위해 막대기로 눈가리개를하고 무작위로 그것을 치면 어떻게 될까요? 빌드 도구 테스트의 아이디어 인 것 같습니다.

죄송합니다 https://en.wikipedia.org/wiki/Scientific_methodhttps://en.wikipedia.org/wiki/Analysis 가 없습니다.


이것이 큰 문제인 C의 관점에서 당신의 대답은 엄청나게 편향되어 있습니다. 빌드 툴은 컴파일러를 실행하는 것 (gcc는 방대한 b 워드)보다 복잡한 것에 필수적이며 엄격한 종속성 선언을 사용하는 종속성 관리는 신의 선물입니다. 사용하지 않는다고해서 이것이 나쁜 개념이라는 것을 의미하지는 않습니다. 단순히 bash 스크립트를 사용하여 물건을 만드는 경우, 그것은 너무 좋은 도구가 아닌 빌드 도구이기도합니다. 손으로 또는 독점적으로 IDE를 통해 컴파일하면 다른 시스템에서 복잡하고 반복 가능한 빌드를 위해 함께 할 수 있습니다.
RecursiveExceptionException
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.