쉘 스크립트 대신 make를 사용하는 이유는 무엇입니까?
Make는 명령 줄 인수를 약간 더 쉽게 처리 할 수있는 쉘 스크립트처럼 보입니다.
./make.sh 대신 make를 실행하는 것이 표준 인 이유
일반적인 아이디어는 make
(합리적으로) 최소한의 재 빌드 를 지원 한다는 것입니다. 즉, 프로그램의 어떤 부분이 다른 부분에 의존하는지 알려주는 것입니다. 프로그램의 일부를 업데이트하면 그에 의존하는 부분 만 다시 빌드됩니다. 쉘 스크립트를 사용하여이 작업을 수행 할 수 는 있지만 훨씬 더 많은 작업이 필요합니다 (모든 파일의 마지막 수정 날짜를 명시 적으로 확인하는 등). 쉘 스크립트의 유일한 대안은 매번 모든 것을 다시 빌드하는 것입니다. 작은 프로젝트의 경우 이것은 완벽하게 합리적인 접근 방식이지만 큰 프로젝트의 경우 전체 재 구축에 1 시간 이상이 쉽게 걸릴 수 있습니다.를 사용 make
하면 1 ~ 2 분 안에 동일한 작업을 쉽게 수행 할 수 있습니다.
Make는 전문가 시스템입니다.
쉘 스크립트로는하기 어려운 여러가지 일들이 있습니다 ...
- 물론, 빌드에 필요한 것만 빌드하기 위해 오래된 항목을 확인합니다.
- 모든 전제 조건이 모든 종속성 이전에 빌드되고 한 번만 빌드되도록 오래된 것을 빌드하기 위해 무엇이 그리고 어떤 순서에 의존하는지 결정 하는 토폴로지 정렬 또는 다른 종류의 트리 분석을 수행합니다.
- 선언적 프로그래밍을 위한 언어입니다 . 명령형 제어 흐름에 병합하지 않고도 새 요소를 추가 할 수 있습니다.
- 여기에는 규칙, 패턴 및 날짜를 처리 하는 추론 엔진 이 포함되어 있으며 ,이를 특정 Makefile의 규칙과 결합하면 make가 전문가 시스템이 됩니다.
- 매크로 프로세서가 있습니다.
- 참조 : make의 이전 요약 .
Make는 소스 파일을 변경할 때 필요한 파일 만 다시 컴파일되도록합니다.
예를 들면 :
final : 1.o 2.o
gcc -o final 1.o 2.o
1.o : 1.c 2.h
gcc -c 1.c
2.o : 2.c 2.h
gcc -c 2.c
파일 2.h
만 변경하고 make
실행하면 세 명령을 모두 역순으로 실행합니다.
파일 1.c
만 변경하고 make
실행하면 처음 2 개의 명령 만 역순으로 실행됩니다.
자신의 쉘 스크립트로이를 수행하려면 많은 if/else
검사 가 필요합니다 .
위와 마찬가지로 Make는 선언적 (-ish) 병렬 프로그래밍 언어입니다.
변환 할 그래픽 파일 4,000 개와 CPU 4 개가 있다고 가정 해 보겠습니다. CPU를 포화시키면서 안정적으로 수행 할 10 줄 셸 스크립트 (여기서는 관대함)를 작성해보십시오.
아마도 진짜 질문은 사람들이 왜 쉘 스크립트를 작성하는 것을 귀찮게 하는가입니다.
make는 의존성을 처리합니다 : makefile은 그것들을 설명합니다 : 바이너리는 객체 파일에 의존하고, 각 객체 파일은 소스 파일과 헤더에 의존합니다 ... make가 실행될 때, 파일의 날짜를 비교하여 재 컴파일이 필요한 것을 결정합니다. .
Makefile에 설명 된 모든 것을 빌드하지 않도록 하나의 타겟을 직접 호출 할 수 있습니다.
또한 make 구문은 대체, vpath를 제공합니다.
이 모든 것은 쉘 스크립트로 작성할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/3798562/why-use-make-over-a-shell-script
'code' 카테고리의 다른 글
IntelliJ 분할 창 탐색 (0) | 2020.08.19 |
---|---|
Parallel.ForEach는 활성 스레드 수를 제한합니까? (0) | 2020.08.19 |
어댑터 데이터 변경시 목록보기 업데이트 (0) | 2020.08.19 |
Gradle에서 한 곳에서 공통 종속성을 어떻게 선언합니까? (0) | 2020.08.19 |
데이터 프레임의 행을 벡터로 변환 (0) | 2020.08.19 |