溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么使用Makefile構(gòu)建Golang項目

發(fā)布時間:2022-07-27 10:14:05 來源:億速云 閱讀:225 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“怎么使用Makefile構(gòu)建Golang項目”,在日常操作中,相信很多人在怎么使用Makefile構(gòu)建Golang項目問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用Makefile構(gòu)建Golang項目”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

    背景

    構(gòu)建和測試大型項目時都會很耗時,且容易出錯。開發(fā)者在開發(fā)過程中需要不斷執(zhí)行g(shù)o build、go run 、go test等相關(guān)命令。還可能需要多個命令來構(gòu)建不同平臺的二進(jìn)制文件。在正式部署時候,我們可能還需要安裝一些依賴項,或者在發(fā)布之前進(jìn)行代碼覆蓋率測試等相關(guān)前置工作。

    整個過程需要很多步驟,但我們有一種簡單的方法可以解決這些復(fù)雜瑣碎的步驟。使用 Make 進(jìn)行自動執(zhí)行任務(wù)。它通過單個命令簡化開發(fā)并自動執(zhí)行重復(fù)性任務(wù)。

    Make 可以幫我們做很多事情:測試、構(gòu)建、清理、安裝 Go 項目。

    創(chuàng)建項目并運(yùn)行

    首先我們先創(chuàng)建一個簡單的項目,創(chuàng)建一個 main.go 文件。為了運(yùn)行項目,我們需要構(gòu)建項目并運(yùn)行二進(jìn)制文件:

    go build main.go

    當(dāng)我們創(chuàng)建 Go 項目然后會遇到需要不同的二進(jìn)制名稱并且需要在特定的操作系統(tǒng)中創(chuàng)建構(gòu)建,那么可以通過指定環(huán)境進(jìn)行構(gòu)建:

    # 指定 macos系統(tǒng)
    GOARCH=amd64 GOOS=darwin go build -o hello-darwin main.go
    # 指定 Linux 操作系統(tǒng)
    GOARCH=amd64 GOOS=linux go build -o hello-linux main.go
    go run hello

    如果在開發(fā)部署過程中,我們不僅要記住這些命令然后遇到不同環(huán)境輸入命令執(zhí)行。在這個過程中你可能會發(fā)生輸錯命令等行為。

    使用 Makefile 可以協(xié)助我們高效工作,因為它可以幫助我們簡化上述命令,甚至可以為特定命令指定規(guī)則并運(yùn)行簡單的 make 命令,這樣不僅可以讓你免去記住這些命令和環(huán)境的關(guān)系。

    添加 Makefile 文件

    在當(dāng)前項目的根目錄下創(chuàng)建一個 Makefile 文件,設(shè)置內(nèi)容如下:

    BINARY_NAME=hello
    build:
     GOARCH=amd64 GOOS=darwin go build -o hello-darwin main.go
     GOARCH=amd64 GOOS=linux go build -o hello-linux main.go
    run:
     ./${BINARY_NAME}
    build_and_run:build run
    clean:
      go clean
      rm ${BINARY_NAME}-darwin
      rm ${BINARY_NAME}-linux

    創(chuàng)建完 Makefile 文件后,就可以通過這些簡單的命令進(jìn)行編譯和運(yùn)行你的 Go 項目:

    make run
    make build
    # 也可以使用在 makefile 中定義的一個命令:build_and_run
    make build_and_run
    # 使用清除命令清除二進(jìn)制文件
    make clean

    以上命令相對于一開始的命令更簡單,使用簡單,也可以避免因輸出命令導(dǎo)致的相關(guān)錯誤。

    Makefile

    概念

    make 命令都是來源于 Makefile 文件的。其都是由一系列的規(guī)則構(gòu)成。每條規(guī)則都是由目標(biāo)、依賴項、命令組成。

    • 目標(biāo) Target:make 命令通過目標(biāo)名稱執(zhí)行具體命令。如上的 make run

    • 依賴項 Dependencies:目標(biāo)可以具有需要在運(yùn)行目標(biāo)之前執(zhí)行的依賴項

    • 配方 recipe:運(yùn)行目標(biāo)時將執(zhí)行的實際命令

    變量

    Makefiles 也有使用變量的機(jī)制。在以上的 Makefile 文件中,可以看到 ${BINARY_NAME} 的變量。所以當(dāng)我們有相同的內(nèi)容時可以通過添加變量進(jìn)行替換。

    可以使用 = 或 := 定義變量。

    = 將遞歸擴(kuò)展變量。 這將替換它被替換時的值。以下例子在運(yùn)行 all 命令時,它會將 x 的值替換為最后更新的值。因此將打?。?code>later bar。 例如:

    x = foo
    y = $(x) bar
    x = later
    all:
     echo $(y)

    但是當(dāng)你使用 := 進(jìn)行變量賦值時,將打印第一次的值,比如:

    x := foo
    y := $(x) bar
    x := later
    all:
     echo $(y)
    > foo bar

    更多使用 makefile 命令,可以參考:makefiletutorial.com/

    使用 Makefile 自動化任務(wù)

    在開發(fā)項目時,可以將一些測試,運(yùn)行測試覆蓋,管理依賴等工作,我們都可以創(chuàng)建一個 Makefile ,并在文件中包含自動化這些任務(wù)的所有規(guī)則:

    BINARY_NAME=hello
    build:
     GOARCH=amd64 GOOS=linux go build -o ${BINARY_NAME}-linux main.go
    run:
     ./${BINARY_NAME}
    build_and_run: build run
    clean:
     go clean
     rm ${BINARY_NAME}-linux
    test:
     go test ./...
    test_coverage:
     go test ./... -coverprofile=coverage.out
    dep:
     go mod download
    vet:
     go vet
    lint:
     golangci-lint run --enable-all

    使用這個簡單的 Makefile,您現(xiàn)在可以輕松地執(zhí)行命令來運(yùn)行任務(wù)。這樣就輕松自動化解決工作。

    make test
    make test_coverage
    make dep
    make vet
    make lint

    到此,關(guān)于“怎么使用Makefile構(gòu)建Golang項目”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI