IT_World
[Go Lang] makefile로 build를 한 번에 본문
메이크파일이란?
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/
'Programming language > go lang' 카테고리의 다른 글
[go lang] fsnotify 또 다른 예시 (0) | 2021.10.03 |
---|---|
[Go lang] shell 창에서 man Makefile 실행 (0) | 2021.10.01 |
[golang] 폴더/파일 감시 fsnotify (0) | 2021.09.29 |
[Golang] test GoConvey 테스트 프레임워크 라이브러리 (0) | 2021.09.28 |
[go lang] go get go install 차이점 및 설치, 사용방법 (0) | 2021.09.15 |