成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 項(xiàng)目使用 Makefile

開發(fā)
本文我們介紹 make 和 Makefile 的使用方法,并且通過 go 命令中的 go build 介紹 Go 項(xiàng)目怎么使用 Makefile,大家可以舉一反三,編寫自己的 Go 項(xiàng)目 Makefile。

01介紹

Go 提供一個(gè)名為go的命令,該命令可自動(dòng)下載、構(gòu)建、安裝和測(cè)試 Go 包和命令。

Go 提供go命令,官方的目的是為了不需要編寫 Makefile,而是能夠僅使用 Go 源代碼本身中的信息來構(gòu)建 Go 代碼。

但是,我們?cè)?Go 項(xiàng)目中也不需要完全摒棄使用 make 和 Makefile,可以使用 Makefile 的“偽目標(biāo)”,簡(jiǎn)化使用 go 命令的復(fù)雜性,規(guī)范團(tuán)隊(duì)使用 go 命令的方式,提升個(gè)人或團(tuán)隊(duì)的生產(chǎn)力。

02make 和 Makefile

make 命令行工具可以自動(dòng)判斷是否需要重新編譯程序,實(shí)際上 make 不僅限于程序,我們可以使用它來描述任何任務(wù),只要其他文件發(fā)生更改,某些文件就必須從其他文件自動(dòng)更新。

在使用 make 命令行工具之前,我們需要編寫一個(gè)名為 Makefile 的文件,該文件描述程序中文件之前的關(guān)系,并提供用于更新每個(gè)文件的命令。也就是說 Makefile 決定 make 做什么。

關(guān)于 Makefile 的介紹,感興趣的讀者朋友,可以查閱相關(guān)資料深入學(xué)習(xí),本文僅介紹 Makefile 的規(guī)則(格式),如下所示:

target ... : prerequisites ...
<Tab>command
...
...

target ... : prerequisites ...;command

閱讀上面示例代碼,target 是目標(biāo)文件,多個(gè)目標(biāo)文件之間使用空格分隔,一般只有一個(gè)目標(biāo)文件,也可以是“偽目標(biāo)”(某個(gè)操作的名字);prerequisites 是先決條件;command 是“命令”,可以在 prerequisites 后面,使用分號(hào)分隔,也可以另起一行,但是必須以開頭,如果想要使用其他鍵,可以使用內(nèi)置變量 .RECIPEPREFIX 聲明。

target 目標(biāo)是必須的,不可省略。prerequisites 和 command 是可選的,但是二者必須存在其一。

03Go 項(xiàng)目使用 Makefile

在 Go 項(xiàng)目中使用 Makefile,一般我們只會(huì)使用“偽目標(biāo)”,我們使用 go build 構(gòu)建可執(zhí)行文件為例,介紹 Go 項(xiàng)目怎么使用 Makefile。

示例代碼:

build: go build -o blog

閱讀上面示例代碼,我們編寫一個(gè)簡(jiǎn)單的 Makefile,定義一個(gè)“偽目標(biāo)” build,命令是 go build -o blog,構(gòu)建名為 blog 的可執(zhí)行文件。

使用 make 命令行工具,運(yùn)行“偽目標(biāo)”build。

make build

運(yùn)行 make build,終端打印出 Makefile 中“偽目標(biāo)” build 的命令。

go build -o blog

如果我們不想打印出執(zhí)行的命令,可以在命令前面加上 @ 符號(hào)。

在實(shí)際項(xiàng)目開發(fā)時(shí),我們可能需要構(gòu)建多個(gè)操作系統(tǒng)的可執(zhí)行文件,我們?cè)倬帉懸粋€(gè) Makefile,新增三個(gè)“偽目標(biāo)”,分別是windows、linux 和 darwin。

示例代碼:

APP=blog

build:
@go build -o ${APP}
windows:
@GOOS=windows go build -o ${APP}-windows
linux:
@GOOS=linux go build -o ${APP}-linux
darwin:
@GOOS=darwin go build -o ${APP}-darwin

閱讀上面示例代碼,我們定義一個(gè)自定義變量 APP,在命令行中使用 $(APP) 調(diào)用變量,并且 GOOS 指定操作系統(tǒng),使用@開頭,不再打印執(zhí)行命令。

運(yùn)行 make windows、make linux 和 make darwin,分別構(gòu)建 windows、linux 和 drawin 操作系統(tǒng)的可執(zhí)行文件。

運(yùn)行結(jié)果如下:

.
├── Makefile
├── blog
├── blog-darwin
├── blog-linux
├── blog-windows
├── go.mod
└── main.go

需要注意的是,如果有文件名和“偽目標(biāo)”同名,那么該“偽目標(biāo)”無法使用 make 命令執(zhí)行指定的 command。因?yàn)?make 發(fā)現(xiàn)與“偽目標(biāo)”同名的文件已存在,將不會(huì)再重新構(gòu)建,所以就不會(huì)運(yùn)行指定的 command,為了避免出現(xiàn)該問題,可以使用內(nèi)置目標(biāo)名.PHONY聲明這些“偽目標(biāo)”名是“偽目標(biāo)”,而不是與“偽目標(biāo)”同名的文件。

完整 Makefile 文件:

APP=blog

.PHONY: help all build windows linux darwin

help:
@echo "usage: make <option>"
@echo "options and effects:"
@echo " help : Show help"
@echo " all : Build multiple binary of this project"
@echo " build : Build the binary of this project for current platform"
@echo " windows: Build the windows binary of this project"
@echo " linux : Build the linux binary of this project"
@echo " darwin : Build the darwin binary of this project"
all:build windows linux darwin
build:
@go build -o ${APP}
windows:
@GOOS=windows go build -o ${APP}-windows
linux:
@GOOS=linux go build -o ${APP}-linux
darwin:
@GOOS=darwin go build -o ${APP}-darwin

閱讀上面示例代碼,我們可以看到 Makefile 中第二個(gè)“偽目標(biāo)” all,該目標(biāo)只有 4 個(gè)先決條件,沒有任何命令。執(zhí)行 make all 命令,可以批量執(zhí)行多個(gè)“偽目標(biāo)”。該命令等同于以下命令:

make build
make windows
make linux
make darwin

細(xì)心的讀者朋友們閱讀到此處,心中可能會(huì)有一個(gè)疑問,想要知道 Makefile 中包含哪些“目標(biāo)”,必須查看 Makefile 文件嗎?

不必如此,我們可以在 Makefile 中編寫一個(gè)“偽目標(biāo)” help,用于描述 Makefile 中的“偽目標(biāo)”列表和使用示例等。

Make 命令運(yùn)行時(shí),如果不指定“目標(biāo)”,默認(rèn)執(zhí)行 Makefile 文件的第一個(gè)“目標(biāo)”。一般將 help 作為 Makefile 的第一個(gè)“偽目標(biāo)”,我們可以執(zhí)行 make 或 make help 命令,輸出使用方法。

04總結(jié)

本文我們介紹 make 和 Makefile 的使用方法,并且通過 go 命令中的 go build 介紹 Go 項(xiàng)目怎么使用 Makefile,大家可以舉一反三,編寫自己的 Go 項(xiàng)目 Makefile。

責(zé)任編輯:未麗燕 來源: Golang語言開發(fā)棧
相關(guān)推薦

2022-08-15 08:06:49

Go語言類型

2022-04-13 08:20:32

DockerGo項(xiàng)目

2022-11-06 23:17:23

Go語言項(xiàng)目

2010-06-22 23:52:42

Automake使用

2022-03-13 23:51:39

Web項(xiàng)目Go

2017-09-12 09:22:51

LinuxMakefileautoconf工具

2010-06-22 15:40:54

Autoconf使用

2024-08-19 01:10:00

RedisGo代碼

2010-02-24 16:01:39

Linux Makef

2010-02-26 10:47:30

Linux Makef

2024-10-06 13:41:25

2021-04-12 21:19:01

PythonMakefile項(xiàng)目

2021-11-01 20:17:07

Go項(xiàng)目目錄

2019-10-11 15:10:09

GVMGoLinux

2010-02-24 14:55:35

Linux Makef

2023-11-01 13:40:25

GolangGo

2024-02-26 00:02:00

開發(fā)Go

2021-02-03 15:10:38

GoKubernetesLinux

2015-08-14 09:21:09

gdb工具調(diào)試 Go

2020-04-30 09:24:46

Go項(xiàng)目語言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 中文字幕 国产 | 91玖玖| 欧美a级成人淫片免费看 | 日日夜夜精品视频 | 激情一区二区三区 | 成人久久久 | 91视频进入 | 天天综合干| 一本大道久久a久久精二百 欧洲一区二区三区 | 成年人精品视频 | 男人天堂午夜 | 在线观看国产精品一区二区 | 国产综合久久 | 亚洲国产精品一区二区久久 | 免费国产视频 | cao视频 | 天天草天天射 | 日韩欧美国产一区二区 | 亚欧性视频 | 亚洲精品在线播放 | 成人亚洲在线 | 一区二区成人 | 亚洲成人精选 | 伊人网伊人网 | 一级aaaaaa毛片免费同男同女 | 黄色毛片在线看 | 亚洲综合久久精品 | 国产女人第一次做爰毛片 | 亚洲精品电影网在线观看 | 91精品国产91久久久 | 久久久久久久久久一区 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 国产精品中文在线 | 91视频久久 | 国产精品久久久久久久岛一牛影视 | 国产精品自拍视频网站 | 欧美一区视频在线 | 日韩精品一区二区三区视频播放 | 99精品视频网 | 亚洲精品日本 | 一区二区三区视频在线观看 |