IT_World

[Go Lang] makefile로 build를 한 번에 본문

Programming language/go lang

[Go Lang] makefile로 build를 한 번에

engine 2021. 9. 30. 14:24

메이크파일이란?

Makefile : Go 애플리케이션뿐만 아니라 대부분의 프로그래밍 언어를 실행하고 구축하는 데 사용할 수 있는 매우 유용한 자동화 도구

일반적으로 MakefilesGithub 및 Gitlab에서 다양한 Go 애플리케이션의 전체 호스트의 루트 디렉토리에서  수 있다.

이러한 애플리케이션의 유지 관리자가 자주 수행하는 작업 자동화를 위한 선택 도구로 광범위하게 사용되기 때문이다.

간단한 예

이제 절대적인 기본 개념을 다루었으므로 Makefile 간단한 예를 통해 이러한 개념이 실제로 작동하는지 살펴본다 .

 

Makefile

hello:
    echo "Hello"

작업할 수 있는 새 디렉토리를 만들고 이 디렉토리 내에서 Makefile 이라는 새 파일을 만든다.

 Makefile을 열고  target호출 hello를 추가한다.

 

main.go

package main

import "fmt"

func main() {
    fmt.Println("Hello")
}

이제 작업할 적절하게 복잡한 Go 애플리케이션 Makefile이 있으므로 애플리케이션 빌드 및 실행 작업을 단순화 할 몇 가지 새 대상을 정의해보겠다 .

Makefile다시 한 번 열고 다음 대상을 추가한다.

 

Makefile

hello:
	echo "Hello"

build:
	go build -o bin/main main.go

run:
	go run main.go

여기에서 build target을 만든다 .

bin/ directory 이동 응용 프로그램을 컴파일하는 데 사용할 수있.

 

이제 이 두 가지를 모두 실행해보겠다.

$ make build
$ go build -o bin/main main.go

make run 실행

$ make run

결과물 출력

go run main.go
Hello
Here we see that our go application is run for us.

여기에서 내가 왜 Go 애플리케이션에 Makefile을 사용하는 것이 감이 안 올 것이다.

Makefile 안에 compile :  GOOS GOARCH를 추가해보자.

compile:
	echo "Compiling for every OS and Platform"
	GOOS=freebsd GOARCH=386 go build -o bin/main-freebsd-386 main.go
	GOOS=linux GOARCH=386 go build -o bin/main-linux-386 main.go
	GOOS=windows GOARCH=386 go build -o bin/main-windows-386 main.go

make compile 실행

$ make compile

실행결과

echo "Compiling for every OS and Platform"
Compiling for every OS and Platform
GOOS=freebsd GOARCH=386 go build -o bin/main-freebsd-386 main.go
GOOS=linux GOARCH=386 go build -o bin/main-freebsd-386 main.go
GOOS=windows GOARCH=386 go build -o bin/main-freebsd-386 main.go

Makefile compile 추가 코드

hello:
	echo "Hello"

build:
	go build -o bin/main main.go

run:
	go run main.go


compile:
	echo "Compiling for every OS and Platform"
	GOOS=linux GOARCH=arm go build -o bin/main-linux-arm main.go
	GOOS=linux GOARCH=arm64 go build -o bin/main-linux-arm64 main.go
	GOOS=freebsd GOARCH=386 go build -o bin/main-freebsd-386 main.go

all: hello build
$ make all

실행결과

echo "Hello"
Hello
go build -o bin/main main.go

접근 방식을 사용하면 더 복잡한 명령을 개별적으로 소화하기 쉽게 디버깅하고 실행할 수 있는 파일이 완성된다.

BINARY_NAME=hello-world

build:
 GOARCH=amd64 GOOS=darwin go build -o ${BINARY_NAME}-darwin main.go
 GOARCH=amd64 GOOS=linux go build -o ${BINARY_NAME}-linux main.go
 GOARCH=amd64 GOOS=window go build -o ${BINARY_NAME}-windows main.go

runs:
 ./${BINARY_NAME}

build_and_run: build run

clean:
 go clean
 rm ${BINARY_NAME}-darwin
 rm ${BINARY_NAME}-linux
 rm ${BINARY_NAME}-windows

test:
 go test ./...

test_coverage:
 go test ./... -coverprofile=coverage.out

dep:
 go mod download

vet:
 go vet

lint:
 golangci-lint run --enable-all

 

전체코드

hello:
	echo "Hello"

build:
	go build -o bin/main main.go

run:
	go run main.go


compile:
	echo "Compiling for every OS and Platform"
	GOOS=linux GOARCH=arm go build -o bin/main-linux-arm main.go
	GOOS=linux GOARCH=arm64 go build -o bin/main-linux-arm64 main.go
	GOOS=freebsd GOARCH=386 go build -o bin/main-freebsd-386 main.go

all: hello build

BINARY_NAME=hello-world

build:
 GOARCH=amd64 GOOS=darwin go build -o ${BINARY_NAME}-darwin main.go
 GOARCH=amd64 GOOS=linux go build -o ${BINARY_NAME}-linux main.go
 GOARCH=amd64 GOOS=window go build -o ${BINARY_NAME}-windows main.go

runs:
 ./${BINARY_NAME}

build_and_run: build run

clean:
 go clean
 rm ${BINARY_NAME}-darwin
 rm ${BINARY_NAME}-linux
 rm ${BINARY_NAME}-windows

test:
 go test ./...

test_coverage:
 go test ./... -coverprofile=coverage.out

dep:
 go mod download

vet:
 go vet

lint:
 golangci-lint run --enable-all
 ROOT :+$(dir $(abspath $(lastword $(ROOT))))
 DIR = $(ROOT)/dir
 COPYDIR = $(ROOT)/copydir
 install : 
 	if [! -d $(DIR)]; then mkdir $(NEWDIR); fi
 	cp -r $(DIR)/ $(COPYDIR)/

 

 

출처 : https://tutorialedge.net/golang/makefiles-for-go-developers/

 

Makefiles for Go Developers

In this tutorial, we are going to be looking at how you, as a Go developer, can leverage the wonderful bit of technology that is Makefiles for fame and fortune when developing your own Go applications.

tutorialedge.net

 

Comments