웹사이트 검색

Makefile을 사용하여 반복 작업을 자동화하는 방법


소개

Linux 서버의 소스 코드에서 소프트웨어를 설치한 경험이 있다면 아마도 make 유틸리티를 접했을 것입니다. 이 도구는 주로 프로그램을 컴파일하고 빌드하는 데 사용됩니다. 이를 통해 소스 코드 작성자는 특정 프로젝트를 빌드하는 데 필요한 단계를 배치할 수 있습니다.

make는 소프트웨어 컴파일을 자동화하기 위해 만들어졌지만 이 도구는 명령줄에서 수행할 수 있는 거의 모든 작업을 자동화하는 데 사용할 수 있을 만큼 충분히 유연한 방식으로 엔지니어링되었습니다. 이 가이드에서는 순서대로 발생하는 반복 작업을 자동화하기 위해 make를 용도 변경하는 방법에 대해 설명합니다.

전제 조건

모든 종류의 Linux 환경에서 이 자습서를 사용할 수 있습니다. 패키지 설치 지침은 Ubuntu/Debian Linux 및 Red Hat/Rocky Linux 모두에 대해 제공됩니다.

Make 설치

대부분의 Linux 배포판에서는 단일 명령으로 컴파일러를 설치할 수 있지만 기본적으로 제공하지는 않습니다.

Ubuntu에서는 잘 지원되는 최신 컴파일러 환경에 필요한 모든 패키지를 제공하는 build-essential 패키지를 설치할 수 있습니다. 패키지 소스를 업데이트하고 apt를 사용하여 패키지를 설치합니다.

  1. sudo apt update
  2. sudo apt install build-essential

Rocky Linux 또는 기타 Red Hat 파생 제품에서 개발 도구라는 패키지 그룹을 설치하여 동일한 컴파일러 기능을 제공할 수 있습니다. dnf를 사용하여 패키지를 설치합니다.

  1. dnf groups mark install "Development Tools"
  2. dnf groupinstall "Development Tools"

시스템에 make 명령이 있는지 확인하여 컴파일러를 사용할 수 있는지 확인할 수 있습니다. 이렇게 하려면 which 명령을 사용하십시오.

  1. which make
Output
/usr/bin/make

이제 당신은 make의 일반적인 기능을 활용할 수 있는 도구를 갖게 되었습니다.

Makefile 이해

make 명령이 명령을 받는 주된 방법은 Makefile을 사용하는 것입니다.

Makefile은 디렉토리에 따라 다릅니다. 즉, make는 이 파일을 찾기 위해 호출된 디렉토리에서 검색합니다. 수행하려는 작업의 루트 또는 작성할 스크립트를 호출하는 것이 가장 적합한 위치에 Makefile을 배치해야 합니다.

Makefile 내에서 특정 형식을 따릅니다. Make는 다음과 같은 방식으로 대상, 소스 및 명령의 개념을 사용합니다.

target: source
    command

이것의 정렬과 형식은 매우 중요합니다. 여기에서 이러한 각 구성 요소의 형식과 의미에 대해 설명합니다.

표적

대상은 명령 그룹을 참조하기 위해 사용자가 지정한 이름입니다. 프로그래밍 언어의 함수와 유사하다고 생각하십시오.

대상은 왼쪽 열에 정렬되고 연속 단어(공백 없음)이며 콜론(:)으로 끝납니다.

make를 호출할 때 다음을 입력하여 대상을 지정할 수 있습니다.

  1. make target_name

Make는 Makefile을 확인하고 해당 대상과 관련된 명령을 실행합니다.

원천

소스는 파일 또는 기타 대상에 대한 참조입니다. 이들은 연관된 대상에 대한 전제조건 또는 종속성을 나타냅니다.

예를 들어 다음과 같은 Makefile 섹션이 있을 수 있습니다.

target1: target2
    target1_command

target2:
    target2_command

이 예에서는 다음과 같이 target1을 호출할 수 있습니다.

  1. make target1

Make는 Makefile로 이동하여 target1 대상을 검색합니다. 그런 다음 지정된 소스가 있는지 확인합니다.

target2 소스 종속성을 찾고 일시적으로 해당 대상으로 점프합니다.

거기에서 target2에 나열된 소스가 있는지 확인합니다. 그렇지 않으므로 target2_command 실행을 진행합니다. 이 시점에서 make는 target2 명령 목록의 끝에 도달하고 제어권을 다시 target1 대상으로 넘깁니다. 그런 다음 target1_command를 실행하고 종료합니다.

소스는 파일이거나 대상 자체일 수 있습니다. Make는 파일 타임스탬프를 사용하여 파일이 마지막 호출 이후에 변경되었는지 확인합니다. 소스 파일이 변경된 경우 해당 대상이 다시 실행됩니다. 그렇지 않으면 종속성을 이행된 것으로 표시하고 다음 소스 또는 유일한 소스인 경우 명령으로 계속 진행합니다.

일반적인 아이디어는 소스를 추가함으로써 현재 대상보다 먼저 실행되어야 하는 순차적인 종속성 세트를 구축할 수 있다는 것입니다. 대상 뒤에 공백으로 구분된 둘 이상의 소스를 지정할 수 있습니다. 정교한 작업 순서를 지정하는 방법을 확인할 수 있습니다.

명령

make 명령에 이러한 유연성을 제공하는 것은 구문의 명령 부분이 매우 개방적이라는 것입니다. 대상에서 실행할 명령을 지정할 수 있습니다. 필요한 만큼 명령을 추가할 수 있습니다.

명령은 대상 선언 다음 줄에 지정됩니다. 하나의 탭 문자로 들여쓰기됩니다. make의 일부 버전은 명령 섹션을 들여쓰는 방법에 대해 유연하지만 일반적으로 make가 의도를 인식하도록 단일 탭을 사용해야 합니다.

Make는 대상 정의 아래에 있는 모든 들여쓰기 행을 별도의 명령으로 간주합니다. 들여쓰기된 줄과 명령을 원하는 만큼 추가할 수 있습니다. Make는 그것들을 한 번에 하나씩 통과할 것입니다.

make에게 명령을 다르게 처리하도록 지시하기 위해 명령 앞에 배치할 수 있는 몇 가지 사항이 있습니다.

  • -: 명령 앞의 대시는 오류가 발생해도 중단하지 않도록 make에게 지시합니다. 예를 들어 파일이 있으면 명령을 실행하고 없으면 아무것도 하지 않으려는 경우에 유용할 수 있습니다.\n
  • @: @ 기호로 명령을 실행하면 명령 호출 자체가 표준 출력으로 인쇄되지 않습니다. 이것은 주로 make가 생성하는 출력을 정리하는 데 사용됩니다.\n

추가 기능

일부 추가 기능은 Makefile에서 더 복잡한 규칙 체인을 만드는 데 도움이 될 수 있습니다.

변수

Make는 makefile에서 대체를 위한 자리 표시자로 작동하는 변수(또는 매크로)를 인식합니다. 파일 상단에 이를 선언하는 것이 가장 좋습니다.

각 변수의 이름은 완전히 대문자입니다. 이름 다음에는 등호가 오른쪽에 있는 값에 이름을 지정합니다. 예를 들어 설치 디렉토리를 /usr/bin으로 정의하려는 경우 파일 맨 위에 INSTALLDIR=/usr/bin을 추가할 수 있습니다.

나중에 파일에서 &#36 (INSTALLDIR) 구문을 사용하여 이 위치를 참조할 수 있습니다.

이스케이프 줄 바꿈

우리가 할 수 있는 또 다른 유용한 일은 명령이 여러 줄에 걸쳐 있도록 허용하는 것입니다.

명령 섹션 내에서 모든 명령 또는 셸 기능을 사용할 수 있습니다. 여기에는 줄을 \\로 끝내는 이스케이프 줄 바꿈 문자가 포함됩니다.

target: source
    command1 arg1 arg2 arg3 arg4 \
    arg5 arg6

if-then 문과 같은 셸의 프로그래밍 기능을 활용하면 더욱 중요해집니다.

target: source
    if [ "condition_1" == "condition_2" ];\
    then\
        command to execute;\
        another command;\
    else\
        alternative command;\
    fi

그러면 이 블록이 한 줄 명령인 것처럼 실행됩니다. 사실 이걸 한 줄로 쓸 수도 있었는데 이렇게 쪼개면 가독성이 상당히 좋아집니다.

줄 끝 문자를 이스케이프하려는 경우 \\ 뒤에 추가 공백이나 탭이 없어야 합니다. 그렇지 않으면 오류가 발생합니다.

파일 접미사 규칙

파일 처리에 사용할 수 있는 추가 기능은 파일 접미사입니다. 확장자를 기반으로 파일을 처리하는 방법을 제공하는 일반적인 규칙입니다.

예를 들어, 디렉토리의 모든 .jpg 파일을 처리하고 ImageMagick 제품군을 사용하여 .png 파일로 변환하려는 경우 Makefile에 다음과 같은 내용이 있을 수 있습니다.

.SUFFIXES: .jpg .png

.jpg.png:
    @echo converting $< to $@
    convert $< $@

여기서 우리가 살펴봐야 할 몇 가지 사항이 있습니다.

첫 번째 부분은 .SUFFIXES: 선언입니다. 이것은 파일 접미사에서 사용할 모든 접미사에 대해 make에 알려줍니다. .c.o 파일과 같이 소스 코드를 컴파일할 때 자주 사용되는 일부 접미사는 기본적으로 포함되며 이 선언에 레이블을 지정할 필요가 없습니다.

다음 부분은 실제 접미사 규칙의 선언입니다. 이는 original_extension.target_extension: 형식을 취합니다.

이것은 실제 대상은 아니지만 두 번째 확장자를 가진 파일에 대한 모든 호출을 일치시키고 첫 번째 확장자의 파일에서 빌드합니다.

우리의 경우 디렉토리에 file.jpg가 있는 경우 file.png라는 파일을 빌드하기 위해 다음과 같이 make를 호출할 수 있습니다.

  1. make file.png

make.SUFFIXES 선언에서 png 파일을 찾고 .png 파일 생성 규칙을 확인합니다. 그런 다음 디렉토리에서 .png.jpg로 대체된 대상 파일을 찾습니다. 그런 다음 다음 명령을 실행합니다.

접미사 규칙은 아직 소개되지 않은 일부 변수를 사용합니다. 이를 통해 현재 진행 중인 프로세스의 부분에 따라 다른 정보를 대체할 수 있습니다.

  • $?: 이 변수는 대상보다 최신인 현재 대상에 대한 종속성 목록을 포함합니다. 이들은 이 대상에서 명령을 실행하기 전에 다시 수행해야 하는 대상입니다.\n
  • $@: 이 변수는 현재 대상의 이름입니다. 이렇게 하면 이 규칙이 패턴을 통해 일치하더라도 만들려는 파일을 참조할 수 있습니다.\n
  • $<: 현재 종속성의 이름입니다. 접미사 규칙의 경우 대상을 만드는 데 사용되는 파일의 이름입니다. 이 예에서는 file.jpg를 포함합니다.\n
  • $*: 이 파일은 일치하는 확장자가 제거된 현재 종속성의 이름입니다. 이것을 대상 파일과 소스 파일 사이의 중간 단계라고 생각하십시오.\n

변환 메이크파일 만들기

일부 이미지 조작을 수행하는 Makefile을 생성한 다음 파일을 파일 서버에 업로드하여 웹 사이트에서 해당 파일을 표시할 수 있도록 합니다.

따라 하려면 시작하기 전에 ImageMagick 패키지가 설치되어 있는지 확인하십시오. 이들은 이미지 조작을 위한 명령줄 도구이며 스크립트에서 사용할 것입니다.

Ubuntu 또는 Debian에서 패키지 소스를 업데이트하고 apt로 설치합니다.

  1. sudo apt-get update
  2. sudo apt-get install imagemagick

Red Hat 또는 Rocky에서 이와 같은 추가 패키지를 가져오려면 epel-release 저장소를 추가한 다음 dnf를 사용하여 패키지를 설치해야 합니다.

  1. dnf install epel-release
  2. dnf install ImageMagick

현재 디렉터리에서 Makefile이라는 파일을 만듭니다.

  1. nano Makefile

이 파일 내에서 전환 목표 구현을 시작합니다.

모든 JPG 파일을 PNG로 변환

우리 서버는 .png 이미지를 독점적으로 제공하도록 설정되었습니다. 이 때문에 업로드하기 전에 모든 .jpg 파일을 .png로 변환해야 합니다.

위에서 배운 것처럼 접미사 규칙은 이를 수행하는 좋은 방법입니다. 우리는 .SUFFIXES: .jpg .png 사이에서 변환할 형식을 나열하는 .SUFFIX 선언으로 시작할 것입니다.

그런 다음 .jpg 파일을 .png 파일로 변경하는 규칙을 만들 수 있습니다. ImageMagick 제품군의 convert 명령을 사용하여 이 작업을 수행할 수 있습니다. 변환 명령 구문은 convert from_file to_file입니다.

이 명령을 구현하려면 시작하는 형식과 끝나는 형식을 지정하는 접미사 규칙이 필요합니다.

.SUFFIXES: .jpg .png

.jpg.png:           ## This is the suffix rule declaration

이제 일치할 규칙이 있으므로 실제 변환 단계를 구현해야 합니다.

여기서 어떤 파일 이름이 일치할지 정확히 알 수 없기 때문에 배운 변수를 사용해야 합니다. 특히 $<를 원본 파일로 참조하고 $@를 변환할 파일로 참조해야 합니다. 이것을 변환 명령에 대해 알고 있는 것과 결합하면 다음 규칙을 얻습니다.

.SUFFIXES: .jpg .png

.jpg.png:
    convert $< $@

echo 문에서 어떤 일이 일어나고 있는지 명시적으로 알 수 있도록 몇 가지 기능을 추가해 보겠습니다. 새 명령 앞에 @ 기호를 포함하고 실제 명령이 실행될 때 인쇄되지 않도록 하기 위해 이미 가지고 있는 명령을 포함합니다.

.SUFFIXES: .jpg .png

.jpg.png:
    @echo converting $< to $@ using ImageMagick...
    @convert $< $@
    @echo conversion to $@ successful!

이 시점에서 테스트할 수 있도록 파일을 저장하고 닫아야 합니다.

jpg 파일을 현재 디렉토리로 가져옵니다. 파일이 없는 경우 wget을 사용하여 DigitalOcean 웹사이트에서 다운로드할 수 있습니다.

  1. wget https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/PoweredByDO/DO_Powered_by_Badge_blue.png
  2. mv DO_Powered_by_Badge_blue.png badge.jpg

badge.png 파일을 생성하도록 요청하여 make 파일이 지금까지 작동하는지 테스트할 수 있습니다.

  1. make badge.png
Output
converting badge.jpg to badge.png using ImageMagick... conversion to badge.png successful!

Make는 Makefile로 이동하고 .SUFFIXES 선언에서 .png를 확인한 다음 일치하는 접미사 규칙으로 이동합니다. 그런 다음 나열된 명령을 실행합니다.

파일 목록 만들기

이 시점에서 make는 우리가 원하는 파일을 명시적으로 지정하면 .png 파일을 만들 수 있습니다.

현재 디렉토리에 .jpg 파일 목록을 만든 다음 변환하면 더 좋을 것입니다. 변환할 모든 파일을 보유하는 변수를 생성하여 이를 수행할 수 있습니다.

이를 수행하는 가장 좋은 방법은 JPG_FILES=&#36 (와일드카드 *.jpg)와 같은 와일드카드 지시문을 사용하는 것입니다.

JPG_FILES=*.jpg와 같은 bash 와일드카드로 대상을 지정할 수 있지만 여기에는 단점이 있습니다. .jpg 파일이 없으면 실제로 *.jpg라는 파일에서 변환 명령을 실행하려고 시도하지만 실패합니다.

위에서 언급한 와일드카드 구문은 현재 디렉토리의 .jpg 파일 목록을 컴파일하고, 파일이 없으면 변수를 아무 것도 설정하지 않습니다.

이 작업을 수행하는 동안 일반적인 .jpg 파일의 약간의 변형을 처리해야 합니다. 이러한 이미지 파일은 종종 .jpg 대신 .jpeg 확장자로 표시됩니다. 이를 자동화된 방식으로 처리하기 위해 프로그램에서 이름을 .jpg 파일로 변경할 수 있습니다.

위의 줄 대신 다음 두 줄을 사용합니다.

JPEG=$(wildcard *.jpg *.jpeg)     ## Has .jpeg and .jpg files
JPG=$(JPEG:.jpeg=.jpg)            ## Only has .jpg files

첫 번째 줄은 현재 디렉토리에 있는 .jpg 및 .jpeg 파일 목록을 컴파일하고 JPEG라는 변수에 저장합니다.

두 번째 줄은 이 변수를 참조하고 이름 변환을 수행하여 .jpeg로 끝나는 JPEG 변수의 이름을 .jpg로 끝나는 이름으로 변환합니다. 이는 &#36 (VARNAME:.convert_from=.convert_to) 구문을 사용하여 수행됩니다.

이 두 줄의 끝에는 .jpg 파일 이름만 포함하는 JPG라는 새 변수가 있습니다. 이러한 파일 중 일부는 실제로 .jpeg 파일이기 때문에 시스템에 실제로 존재하지 않을 수 있습니다(실제 이름 변경이 발생하지 않음). 이 목록을 사용하여 만들려는 .png 파일의 목록을 만들기만 하므로 괜찮습니다.

JPEG=$(wildcard *.jpg *.jpeg)
JPG=$(JPEG:.jpeg=.jpg)
PNG=$(JPG:.jpg=.png)

이제 PNG 변수에 요청할 파일 목록이 있습니다. 다른 이름 변환을 수행했기 때문에 이 목록에는 .png 파일 이름만 포함됩니다. 이제 이 디렉토리에 있는 .jpg 또는 .jpeg 파일인 모든 파일은 생성하려는 .png 파일 목록을 컴파일하는 데 사용되었습니다.

또한 .SUFFIXES 선언과 접미사 규칙을 업데이트하여 현재 .jpeg 파일을 처리하고 있음을 반영해야 합니다.

JPEG=$(wildcard *.jpg *.jpeg)
JPG=$(JPEG:.jpeg=.jpg)
PNG=$(JPG:.jpg=.png)
.SUFFIXES: .jpg .jpeg .png

.jpeg.png .jpg.png:
    @echo converting $< to $@ using ImageMagick...
    @convert $< $@
    @echo conversion to $@ successful!

보시다시피 접미사 목록에 .jpeg를 추가했으며 규칙에 대한 다른 접미사 일치도 포함했습니다.

일부 대상 만들기

현재 Makefile에 상당히 많은 것이 있지만 아직 정상적인 대상은 없습니다. PNG 목록을 접미사 규칙에 전달할 수 있도록 수정해 보겠습니다.

JPEG=$(wildcard *.jpg *.jpeg)
JPG=$(JPEG:.jpeg=.jpg)
PNG=$(JPG:.jpg=.png)
.SUFFIXES: .jpg .jpeg .png

convert: $(PNG)

.jpeg.png .jpg.png:
    @echo converting $< to $@ using ImageMagick...
    @convert $< $@
    @echo conversion to $@ successful!

이 새로운 대상이 하는 일은 우리가 요구 사항으로 수집한 .png 파일 이름을 나열하는 것입니다. 그런 다음 Make는 .png 파일을 획득할 수 있는 방법이 있는지 확인하고 이를 위해 접미사 규칙을 사용합니다.

이제 이 명령을 사용하여 모든 .jpg 및 .jpeg 파일을 .png 파일로 변환할 수 있습니다.

  1. make convert

다른 대상을 추가해 보겠습니다. 이미지를 서버에 업로드할 때 일반적으로 수행되는 또 다른 작업은 크기를 조정하는 것입니다. 이미지를 올바른 크기로 지정하면 사용자가 이미지를 요청할 때 즉시 크기를 조정하지 않아도 됩니다.

mogrify라는 ImageMagick 명령은 필요한 방식으로 이미지 크기를 조정할 수 있습니다. 이미지가 사이트에 표시될 영역의 너비가 500px라고 가정해 보겠습니다. 다음 명령을 사용하여 이 영역을 변환할 수 있습니다.

  1. mogrify -resize 500\> file.png

그러면 이 영역에 맞게 너비가 500px보다 큰 이미지의 크기가 조정되지만 더 작은 이미지는 건드리지 않습니다. 이것이 우리가 원하는 것입니다. 대상으로 다음 규칙을 추가할 수 있습니다.

resize: $(PNG)
    @echo resizing file...
    @mogrify -resize 648\> $(PNG)
    @echo resizing is complete!

다음과 같이 파일에 추가할 수 있습니다.

JPEG=$(wildcard *.jpg *.jpeg)
JPG=$(JPEG:.jpeg=.jpg)
PNG=$(JPG:.jpg=.png)
.SUFFIXES: .jpg .jpeg .png

convert: $(PNG)

resize: $(PNG)
    @echo resizing file...
    @mogrify -resize 648\> $(PNG)
    @echo resizing is complete!

.jpeg.png .jpg.png:
    @echo converting $< to $@ using ImageMagick...
    @convert $< $@
    @echo conversion to $@ successful!

이제 이 두 대상을 다른 대상의 종속성으로 함께 묶을 수 있습니다.

JPEG=$(wildcard *.jpg *.jpeg)
JPG=$(JPEG:.jpeg=.jpg)
PNG=$(JPG:.jpg=.png)
.SUFFIXES: .jpg .jpeg .png

webify: convert resize

convert: $(PNG)

resize: $(PNG)
    @echo resizing file...
    @mogrify -resize 648\> $(PNG)
    @echo resizing is complete!

.jpeg.png .jpg.png:
    @echo converting $< to $@ using ImageMagick...
    @convert $< $@
    @echo conversion to $@ successful!

암시적으로 크기 조정이 변환과 동일한 명령을 실행한다는 것을 알 수 있습니다. 항상 그런 것은 아니지만 두 가지를 모두 지정할 것입니다. 변환은 앞으로 더 정교한 처리를 포함할 수 있습니다.

이제 webify 대상이 이미지를 변환하고 크기를 조정합니다.

원격 서버에 파일 업로드

이제 웹용 이미지가 준비되었으므로 대상을 생성하여 서버의 정적 이미지 디렉토리에 이미지를 업로드할 수 있습니다. 변환된 파일 목록을 scp에 전달하여 이 작업을 수행할 수 있습니다.

우리의 목표는 다음과 같이 보일 것입니다.

upload: webify
    scp $(PNG) root@ip_address:/path/to/static/images

그러면 모든 파일이 원격 서버에 업로드됩니다. 이제 파일은 다음과 같습니다.

JPEG=$(wildcard *.jpg *.jpeg)
JPG=$(JPEG:.jpeg=.jpg)
PNG=$(JPG:.jpg=.png)
.SUFFIXES: .jpg .jpeg .png

upload: webify
    scp $(PNG) root@ip_address:/path/to/static/images

webify: convert resize

convert: $(PNG)

resize: $(PNG)
    @echo resizing file...
    @mogrify -resize 648\> $(PNG)
    @echo resizing is complete!

.jpeg.png .jpg.png:
    @echo converting $< to $@ using ImageMagick...
    @convert $< $@
    @echo conversion to $@ successful!

정리

원격 서버에 업로드된 후 모든 로컬 .png 파일을 제거하는 정리 옵션을 추가해 보겠습니다.

clean:
    rm *.png

이제 파일을 원격 서버에 업로드한 후 이 대상을 호출하는 다른 대상을 맨 위에 추가할 수 있습니다. 이것은 가장 완전한 목표가 될 것이며 우리가 기본값으로 삼고자 하는 것입니다.

이를 지정하기 위해 사용 가능한 첫 번째 대상으로 지정합니다. 기본값으로 사용됩니다. 관례에 따라 all이라고 합니다.

JPEG=$(wildcard *.jpg *.jpeg)
JPG=$(JPEG:.jpeg=.jpg)
PNG=$(JPG:.jpg=.png)
.SUFFIXES: .jpg .jpeg .png

all: upload clean

upload: webify
    scp $(PNG) root@ip_address:/path/to/static/images

webify: convert resize

convert: $(PNG)

resize: $(PNG)
    @echo resizing file...
    @mogrify -resize 648\> $(PNG)
    @echo resizing is complete!

clean:
    rm *.png

.jpeg.png .jpg.png:
    @echo converting $< to $@ using ImageMagick...
    @convert $< $@
    @echo conversion to $@ successful!

이 마지막 터치로 Makefile과 .jpg 또는 .jpeg 파일이 있는 디렉토리에 들어가면 인수 없이 make를 호출하여 파일을 처리하고 서버로 보낸 다음 업로드한 .png 파일을 삭제할 수 있습니다.

  1. make

보시다시피 작업을 함께 연결하고 특정 지점까지 프로세스를 선별할 수도 있습니다. 예를 들어 파일을 변환하고 다른 서버에서 호스팅해야 하는 경우에만 webify 대상을 사용할 수 있습니다.

결론

이 시점에서 일반적으로 Makefile을 사용하는 방법에 대해 잘 알고 있어야 합니다. 더 구체적으로 말하자면, 대부분의 절차를 자동화하기 위한 도구로 make를 사용하는 방법을 알아야 합니다.

경우에 따라 스크립트를 작성하는 것이 더 나을 수도 있지만 Makefile은 프로세스 간에 구조화된 계층적 관계를 설정하는 방법입니다. 이 도구를 활용하는 방법을 배우면 반복적인 작업을 보다 쉽게 관리할 수 있습니다.