初次接觸Makefile還是在跟朋友一起寫Go專案的時候,他給我們介紹的,第一感覺聽說,感覺挺好用,作為一個碼農,對於未知的技術,應該保持好奇心,管它三七二十一,先了解了解,用起來再說
下面引用了一堆官方介紹:
很多 Linux(Unix) 做開發的初學者不瞭解 Makefile 是什麼,甚至大部分 Windows 開發工程師對 Makefile 都特別陌生。這個其實很正常,如果你是在 Windows 下作開發的話不需要去考慮這個問題,因為 Windows 下的整合開發環境(IDE)已經內建了 Makefile,或者說會自動生成 Makefile,我們不用去手動編寫。
Linux 中卻不能這樣,需要我們去手動的完成這項工作。Linux 下可以學習的開發語言有很多,常見的有 C/C++語言、python、java 等等。如果你想要在 Linux(Unix) 下做開發的話,不瞭解 Makefile 是一件非常失敗的事情,甚至說你就成為不了一個合格的 Linux 開發工程師。不懂 Makefile,就操作不了多檔案程式設計,就完成不了相對於大的工程專案的操作。如果你想在 Linux(Unix) 環境下做開發的話,Makefile 是必須掌握的一項技能。
那麼,究竟什麼是 Makefile 呢?
Makefile 可以簡單的認為是一個工程檔案的編譯規則,描述了整個工程的編譯和連結等規則。其中包含了那些檔案需要編譯,那些檔案不需要編譯,那些檔案需要先編譯,那些檔案需要後編譯,那些檔案需要重建等等。編譯整個工程需要涉及到的,在 Makefile 中都可以進行描述。換句話說,Makefile 可以使得我們的專案工程的編譯變得自動化,不需要每次都手動輸入一堆原始檔和引數。
複製了一堆了,總結一下:
make介紹
make是一個構建自動化工具,會在當前目錄下尋找Makefile或makefile檔案。如果存在相應的檔案,它就會依據其中定義好的規則完成構建任務。
Makefile介紹
我們可以把Makefile簡單理解為它定義了一個專案檔案的編譯規則。藉助Makefile我們在編譯過程中不再需要每次手動輸入編譯的命令和編譯的引數,可以極大簡化專案編譯過程。同時使用Makefile也可以在專案中確定具體的編譯規則和流程,很多開源專案中都會定義Makefile檔案。
廢話不多說了,趕緊為Go專案編寫Makefile
規則概述
Makefile由多條規則組成,每條規則主要由兩個部分組成,分別是依賴的關係和執行的命令。
其結構如下所示:
[target] ... : [prerequisites] ...
<tab>[command]
...
...
其中:
- targets:規則的目標
- prerequisites:可選的要生成 targets 需要的檔案或者是目標。
- command:make 需要執行的命令(任意的 shell 命令)。可以有多條命令,每一條命令佔一行。
build:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o xx
示例
.PHONY: all build run gotool clean help
BINARY="myapp"
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 程式碼, 並編譯生成二進位制檔案"
@echo "make build - 編譯 Go 程式碼, 生成二進位制檔案"
@echo "make run - 直接執行 Go 程式碼"
@echo "make clean - 移除二進位制檔案和 vim swap files"
@echo "make gotool - 執行 Go 工具 'fmt' and 'vet'"
或者
.PHONY:clean
clean:
rm -rf *.o test
.PHONY:run
run:
@go run ./
BINARY=”myapp”是定義變數。
.PHONY用來定義偽目標。不建立目標檔案,而是去執行這個目標下面的命令。
@符號就是代表執行此命令但是不用輸出該命令
clean命令可以看出可以支援shell命令
最近用的kratos微服務框架等也都在使用這個,先用起來在慢慢研究吧~
本作品採用《CC 協議》,轉載必須註明作者和本文連結