Profile picture

[Shell Script] Golang(고랭) OS별 실행파일 생성하기

JaehyoJJAng2024년 04월 20일

개요

Go 언어로 작성된 프로그램을 다양한 운영체제와 아키텍처에서 실행 가능한 바이너리 파일로 컴파일하기 위해서

간단한 셸 스크립트를 작성해볼 것이다.

아주 간단하게 환경 변수만 설정해주면 된다.


스크립트

#!/usr/bin/bash

# 모듈 생성
moduleName='goProjects/hello'
go mod init "$moduleName" 2>/dev/null

# 프로그램 이름
APP_NAME="myapp"

# 운영체제 및 아키텍처 조합
PLATFORMS=("linux/amd64" "windows/amd64")

# 빌드
function build() {
  OS=$1
  ARCH=$2
  OUTPUT_DIR="bin/$OS-$ARCH"
  OUTPUT_NAME="$APP_NAME"

  # windows의 경우 .exe 확장자 추가
  if [[ "$OS" == "windows" ]]; then
    OUTPUT_NAME="$OUTPUT_NAME.exe"
  fi

  # 출력 디렉토리 생성
  mkdir -p "$OUTPUT_DIR"

  # 환경변수 설정 및 빌드
  GOOS=$OS GOARCH=$ARCH go build -o "$OUTPUT_DIR/$OUTPUT_NAME"

  if [[ "$?" -ne 0 ]]; then
    echo "Failed to build for $OS/$ARCH"
  else
    echo "Successfully built for $OS/$ARCH"
  fi
}


# 모든 플랫폼에 대한 빌드 실행
for OS in "${PLATFORMS[@]}"; do
  OS=$(echo $PLATFORM | cut -d '/' -f 1)
  ARCH=$(echo $PLATFORM | cut -d '/' -f 2)
  build $OS $ARCH
done

스크립트 설명

  • APP_NAME: 컴파일할 Go 프로그램의 이름
  • PLATFORMS: 타겟으로 하는 운영체제와 아키텍처 조합.
    • 이 예시에서는 linux/amd64, windows/amd64가 포함되어 있음.
  • build 함수: 주어진 운영체제 조합으로 Go 프로그램을 컴파일.
    • Windows의 경우 실행 파일에 .exe 확장자를 추가.
  • 스크립트 실행: PLATFORMS 목록에 있는 모든 조합에 대해 build 함수를 호출하여 바이너리 파일을 생성.

실행

위 스크립트를 build.sh 파일로 저장하고

실행 권한 부여 후 실행

chmod u+x build.sh
bash build.sh
linux
Successfully built for linux/amd64
...

Loading script...