1. 程式人生 > 實用技巧 >docker 容器服務指令碼自啟動

docker 容器服務指令碼自啟動

make

make是一個構建自動化工具,會在當前目錄下尋找Makefilemakefile檔案。如果存在相應的檔案,它就會依據其中定義好的規則完成構建任務。

makefile

什麼是makefile?或許很多Winodws的程式設計師都不知道這個東西,因為那些Windows的IDE都為你做了這個工作,但我覺得要作一個好的和professional的程式設計師,makefile還是要懂。這就好像現在有這麼多的HTML的編輯器,但如果你想成為一個專業人士,你還是要了解HTML的標識的含義。特別在Unix下的軟體編譯,你就不能不自己寫makefile了,會不會寫makefile,從一個側面說明了一個人是否具備完成大型工程的能力

。因為,makefile關係到了整個工程的編譯規則。一個工程中的原始檔不計數,其按*型別、功能、模組*分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更復雜的功能操作,因為makefile就像一個Shell指令碼一樣,其中也可以執行作業系統的命令。makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟體開發的效率。make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數的IDE都有這個命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,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="coursemanager"

all: 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'"

參考文章: