亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go項(xiàng)目編寫Makefile規(guī)則文件概述

 更新時(shí)間:2022年04月16日 13:50:52   作者:Jeff的技術(shù)棧  
這篇文章主要為大家介紹了Go項(xiàng)目編寫Makefile文件規(guī)則概述,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

make介紹

借助Makefile我們?cè)诰幾g過(guò)程中不再需要每次手動(dòng)輸入編譯的命令和編譯的參數(shù),可以極大簡(jiǎn)化項(xiàng)目編譯過(guò)程。

make是一個(gè)構(gòu)建自動(dòng)化工具,會(huì)在當(dāng)前目錄下尋找Makefilemakefile文件。如果存在相應(yīng)的文件,它就會(huì)依據(jù)其中定義好的規(guī)則完成構(gòu)建任務(wù)。

Makefile介紹

我們可以把Makefile簡(jiǎn)單理解為它定義了一個(gè)項(xiàng)目文件的編譯規(guī)則。借助Makefile我們?cè)诰幾g過(guò)程中不再需要每次手動(dòng)輸入編譯的命令和編譯的參數(shù),可以極大簡(jiǎn)化項(xiàng)目編譯過(guò)程。同時(shí)使用Makefile也可以在項(xiàng)目中確定具體的編譯規(guī)則和流程,很多開(kāi)源項(xiàng)目中都會(huì)定義Makefile文件。

本文不會(huì)詳細(xì)介紹Makefile的各種規(guī)則,只會(huì)給出Go項(xiàng)目中常用的Makefile示例。

Makefile文件教程解析

我們教程主要是講的是 Makefile 。很多 Linux(Unix) 做開(kāi)發(fā)的初學(xué)者不了解 Makefile 是什么,甚至大部分 Windows 開(kāi)發(fā)工程師對(duì) Makefile 都特別陌生。這個(gè)其實(shí)很正常,如果你是在 Windows 下作開(kāi)發(fā)的話不需要去考慮這個(gè)問(wèn)題,因?yàn)?Windows 下的集成開(kāi)發(fā)環(huán)境(IDE)已經(jīng)內(nèi)置了 Makefile,或者說(shuō)會(huì)自動(dòng)生成 Makefile,我們不用去手動(dòng)編寫。

Linux 中卻不能這樣,需要我們?nèi)ナ謩?dòng)的完成這項(xiàng)工作。Linux 下可以學(xué)習(xí)的開(kāi)發(fā)語(yǔ)言有很多,常見(jiàn)的有 C/C++語(yǔ)言、python、java 等等。如果你想要在 Linux(Unix) 下做開(kāi)發(fā)的話,不了解 Makefile 是一件非常失敗的事情,甚至說(shuō)你就成為不了一個(gè)合格的 Linux 開(kāi)發(fā)工程師。不懂 Makefile,就操作不了多文件編程,就完成不了相對(duì)于大的工程項(xiàng)目的操作。如果你想在 Linux(Unix) 環(huán)境下做開(kāi)發(fā)的話,Makefile 是必須掌握的一項(xiàng)技能。

那么,究竟什么是 Makefile 呢?

Makefile 可以簡(jiǎn)單的認(rèn)為是一個(gè)工程文件的編譯規(guī)則,描述了整個(gè)工程的編譯和鏈接等規(guī)則。其中包含了那些文件需要編譯,那些文件不需要編譯,那些文件需要先編譯,那些文件需要后編譯,那些文件需要重建等等。

編譯整個(gè)工程需要涉及到的,在 Makefile 中都可以進(jìn)行描述。換句話說(shuō),Makefile 可以使得我們的項(xiàng)目工程的編譯變得自動(dòng)化,不需要每次都手動(dòng)輸入一堆源文件和參數(shù)。

以 Linux 下的C語(yǔ)言開(kāi)發(fā)為例來(lái)具體說(shuō)明一下,多文件編譯生成一個(gè)文件,編譯的命令如下所示:

gcc -o outfile name1.c name2.c ...

outfile 要生成的可執(zhí)行程序的名字,nameN.c 是源文件的名字。這是我們?cè)?Linux 下使用 gcc 編譯器編譯 C 文件的例子。如果我們遇到的源文件的數(shù)量不是很多的話,可以選擇這樣的編譯方式。如果源文件非常的多的話,就會(huì)遇到下面的這些問(wèn)題。

1) 編譯的時(shí)候需要鏈接庫(kù)的的問(wèn)題。拿C語(yǔ)言來(lái)說(shuō),編譯的時(shí)候 gcc 只會(huì)默認(rèn)鏈接一些基本的C語(yǔ)言標(biāo)準(zhǔn)庫(kù),很多源文件依賴的標(biāo)準(zhǔn)庫(kù)都需要我們手動(dòng)鏈接。

下面列舉了一些需要我們手動(dòng)鏈接的標(biāo)準(zhǔn)庫(kù):

  • name1.c 用到了數(shù)學(xué)計(jì)算庫(kù) math 中的函數(shù),我們得手動(dòng)添加參數(shù) -Im;
  • name4.c 用到了小型數(shù)據(jù)庫(kù) SQLite 中的函數(shù),我們得手動(dòng)添加參數(shù) -lsqlite3;
  • name5.c 使用到了線程,我們需要去手動(dòng)添加參數(shù) -lpthread。

因?yàn)橛泻芏嗟奈募?,還要去鏈接很多的第三方庫(kù)。所以在編譯的時(shí)候命令會(huì)很長(zhǎng),并且在編譯的時(shí)候我們可能會(huì)涉及到文件鏈接的順序問(wèn)題,所以手動(dòng)編譯會(huì)很麻煩。

如果我們學(xué)會(huì)使用 Makefile 就不一樣了,它會(huì)徹底簡(jiǎn)化編譯的操作。把要鏈接的庫(kù)文件放在 Makefile 中,制定相應(yīng)的規(guī)則和對(duì)應(yīng)的鏈接順序。這樣只需要執(zhí)行 make 命令,工程就會(huì)自動(dòng)編譯。每次想要編譯工程的時(shí)候就執(zhí)行 make ,省略掉手動(dòng)編譯中的參數(shù)選項(xiàng)和命令,非常的方便。

2) 編譯大的工程會(huì)花費(fèi)很長(zhǎng)的時(shí)間。

如果我們?nèi)プ鲰?xiàng)目開(kāi)發(fā),免不了要去修改工程項(xiàng)目的源文件,每次修改后都要去重新編譯。一個(gè)大的工程項(xiàng)目可不止有幾個(gè)的源文件,里面的源文件個(gè)數(shù)可能有成百上千個(gè)。例如一個(gè)內(nèi)核,或者是一個(gè)軟件的源碼包。這些都是我們做開(kāi)發(fā)經(jīng)常會(huì)遇到的。要完成這樣的文件的編譯,我們消耗的時(shí)間可不是一點(diǎn)點(diǎn)。如果文件特別大的話我們可能要花上半天的時(shí)間。

對(duì)于這樣的問(wèn)題我們 Makefile 可以解決嗎?當(dāng)然是可以的,Makefile 支持多線程并發(fā)操作,會(huì)極大的縮短我們的編譯時(shí)間,并且當(dāng)我們修改了源文件之后,編譯整個(gè)工程的時(shí)候,make 命令只會(huì)編譯我們修改過(guò)的文件,沒(méi)有修改的文件不用重新編譯,也極大的解決了我們耗費(fèi)時(shí)間的問(wèn)題。

這其實(shí)是我們遇到的比較常見(jiàn)的問(wèn)題,當(dāng)然可能遇到的問(wèn)題還會(huì)有很多,比如:工程文件中的源文件的類型很多,編譯的話需要選擇的編譯器;文件可能會(huì)分布在不同的目錄中,使用時(shí)需要調(diào)價(jià)路徑。這些問(wèn)題都可以通過(guò) Makefile 解決。并且文件中的 Makefile 只需要完成一次,一般我們只要不增加或者是刪除工程中的文件,Makefile 基本上不用去修改,編譯時(shí)只用一個(gè) make 命令。為我們提供了極大的便利,很大程度上提高編譯的效率。

規(guī)則概述

Makefile由多條規(guī)則組成,每條規(guī)則主要由兩個(gè)部分組成,分別是依賴的關(guān)系和執(zhí)行的命令。

其結(jié)構(gòu)如下所示:

[target] ... : [prerequisites] ...
<tab>[command]
    ...
    ...

其中:

targets:規(guī)則的目標(biāo)

prerequisites:可選的要生成 targets 需要的文件或者是目標(biāo)。

command:make 需要執(zhí)行的命令(任意的 shell 命令)??梢杂卸鄺l命令,每一條命令占一行。

舉個(gè)例子:

build:
	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o xx

示例

.PHONY: all build run gotool clean help
BINARY="bluebell"
all: gotool build
build:
	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ${BINARY}
run:
	@go run ./
gotool:
	go fmt ./
	go vet ./
clean:
	@if [ -f ${BINARY} ] ; then rm ${BINARY} ; fi
help:
	@echo "make - 格式化 Go 代碼, 并編譯生成二進(jìn)制文件"
	@echo "make build - 編譯 Go 代碼, 生成二進(jìn)制文件"
	@echo "make run - 直接運(yùn)行 Go 代碼"
	@echo "make clean - 移除二進(jìn)制文件和 vim swap files"
	@echo "make gotool - 運(yùn)行 Go 工具 'fmt' and 'vet'"

以上就是Go項(xiàng)目編寫Makefile規(guī)則概述的詳細(xì)內(nèi)容,更多關(guān)于Go項(xiàng)目編寫Makefile規(guī)則的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • go內(nèi)存緩存BigCache之Entry封裝源碼閱讀

    go內(nèi)存緩存BigCache之Entry封裝源碼閱讀

    這篇文章主要介紹了go內(nèi)存緩存BigCache之Entry封裝源碼閱讀
    2023-09-09
  • GoLand 2020.3 正式發(fā)布有不少新功能(支持泛型)

    GoLand 2020.3 正式發(fā)布有不少新功能(支持泛型)

    這是 2020 年第 3 個(gè)版本,也是最后一個(gè)版本,你還將發(fā)現(xiàn)許多新的代碼編輯功能,具體內(nèi)容詳情跟隨小編看看有哪些新特性
    2020-12-12
  • Go?Gin框架優(yōu)雅重啟和停止實(shí)現(xiàn)方法示例

    Go?Gin框架優(yōu)雅重啟和停止實(shí)現(xiàn)方法示例

    Web應(yīng)用程序中,有時(shí)需要重啟或停止服務(wù)器,無(wú)論是因?yàn)楦麓a還是進(jìn)行例行維護(hù),這時(shí)需要保證應(yīng)用程序的可用性和數(shù)據(jù)的一致性,就需要優(yōu)雅地關(guān)閉和重啟應(yīng)用程序,即不丟失正在處理的請(qǐng)求和不拒絕新的請(qǐng)求,本文將詳解如何在Go語(yǔ)言中使用Gin這個(gè)框架實(shí)現(xiàn)優(yōu)雅的重啟停止
    2024-01-01
  • Golang中匿名組合實(shí)現(xiàn)偽繼承的方法

    Golang中匿名組合實(shí)現(xiàn)偽繼承的方法

    這篇文章主要介紹了Golang中匿名組合實(shí)現(xiàn)偽繼承的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • Golang中對(duì)json的優(yōu)雅處理方式

    Golang中對(duì)json的優(yōu)雅處理方式

    這篇文章主要給大家介紹了關(guān)于Golang中對(duì)json的優(yōu)雅處理方式,解析JSON在golang中很麻煩,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 利用Go語(yǔ)言追加內(nèi)容到文件末尾

    利用Go語(yǔ)言追加內(nèi)容到文件末尾

    關(guān)于Go語(yǔ)言讀寫文件,網(wǎng)上很多教程了,但是今天有個(gè)需求,想要把內(nèi)容追加寫到文件末尾,在網(wǎng)上找了很久才找到答案,現(xiàn)在分享給大家,有需要的可以參考借鑒。
    2016-09-09
  • Golang學(xué)習(xí)筆記(一):簡(jiǎn)介

    Golang學(xué)習(xí)筆記(一):簡(jiǎn)介

    這篇文章主要介紹了Golang學(xué)習(xí)筆記(一):簡(jiǎn)介,本文講解了Go語(yǔ)言最主要的特性、安裝、環(huán)境變量設(shè)置、整體目錄結(jié)構(gòu)、Helloworld、go命令、調(diào)試、編輯器設(shè)置等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • golang實(shí)現(xiàn)瀏覽器導(dǎo)出excel文件功能

    golang實(shí)現(xiàn)瀏覽器導(dǎo)出excel文件功能

    這篇文章主要介紹了golang實(shí)現(xiàn)瀏覽器導(dǎo)出excel文件功能,文章通過(guò)golang導(dǎo)出excel文件返回給web,實(shí)現(xiàn)瀏覽器導(dǎo)出excel文件功能,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-03-03
  • Go語(yǔ)言多值替換的HTML模板實(shí)例分析

    Go語(yǔ)言多值替換的HTML模板實(shí)例分析

    這篇文章主要介紹了Go語(yǔ)言多值替換的HTML模板,實(shí)例分析了Go語(yǔ)言多值替換與數(shù)組迭代的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 淺談go中cgo的幾種使用方式

    淺談go中cgo的幾種使用方式

    本文主要介紹了淺談go中cgo的幾種使用方式,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論