Slog66_自動化工具之make和Makefile1
阿新 • • 發佈:2018-12-10
- ArthurSlog
- SLog-66
- Year·1
- Guangzhou·China
- Sep 10th 2018
天之道 損有餘而補不足 人之道則不然 損不足以奉有餘
開發環境MacOS(High Sierra 10.13.5)
需要的資訊和資訊源:
開始編碼
- 切換至桌面,建立一個資料夾 makefile_demo
cd ~/Desktop/ && mkdir makefile_demo
- 切換至makefile_demo路徑下
cd makefile_demo
- 編寫一份Makefile檔案
Makefile
say_hello: echo "Hello Malefile"
- 然後,開啟命令列,在當前路徑下輸入一下指令
make
- 結果是:
echo "Hello Malefile"
Hello Malefile
- 上面的程式碼中;
- say_hello 是一個方法,這個方法會被命令列執行,
- echo "Hello Malefile" 是方法say_hello的主體,echo是系統指令,指令的結果 是在控制檯列印“Hello Malefile”這行字
- echo "Hello Malefile" 這一行不是我們要的,所以在前面加上@,取消命令本身的輸出
Makefile
say_hello:
@echo "Hello Malefile"
- 重新試試,開啟命令列,在當前路徑下輸入一下指令
make
- 結果是:
Hello Malefile
- 現在來寫一個常用的Makefile檔案,這裡面有三個方法
Makefile
say_hello:
@echo "Hello Malefile"
generate:
@echo "Create some text file..."
touch file-{1..10}.txt
clean:
@echo "Cleaning up..."
rm *.txt
- 重新試試,開啟命令列,在當前路徑下輸入一下指令
make
- 結果仍舊是:
Hello Malefile
- 下面的兩個函式並沒有執行
- 我們需要搞點額外的東西,預設執行的方法換一下
- 我們需要設定一個物件,把要執行的函式填入這個物件裡,舉個栗子:“.DEFAULT_GOAL := generate”
- 完整的程式碼如下:
Makefile
.DEFAULT_GOAL := generate
say_hello:
@echo "Hello Malefile"
generate:
@echo "Create some text files..."
touch file-{1..10}.txt
clean:
@echo "Cleaning up..."
rm *.txt
- 然後,開啟命令列,在當前路徑下輸入一下指令
make
- 結果是:
Create some text files...
touch file-{1..10}.txt
- 現在預設執行的方法就是generate了
- 但是設定.DEFAULT_GOAL物件一次只能執行一個方法
- 如果要呼叫多個方法,就需要設定all物件,栗子如下:
Makefile
all: say_hello generate
say_hello:
@echo "Hello Malefile"
generate:
@echo "Creating some files..."
touch file-{1..10}.txt
clean:
@echo "Cleaning up..."
rm *.txt
- 先把剛剛生成的.txt檔案都刪掉
rm -rf *.txt
- 然後,開啟命令列,在當前路徑下輸入一下指令
make
- 結果是:
Hello Malefile
Create some files...
touch file-{1..10}.txt
- ok,現在已經兩個方法都執行了
- 現在,在說一個 “強制所有檔案更新” 的方法
Markfile
.PHONY: all say_hello generate clean
all: say_hello generate
say_hello:
@echo "Hello Malefile"
generate:
@echo "Creating some files..."
touch file-{1..10}.txt
clean:
@echo "Cleaning up..."
rm *.txt
- 看到上面的栗子,”.PHONY“裡有四個“強制所有檔案更新”的方法:
- all // all裡面的方法是say_hello + generate
- say_hello
- generate
- clean
- 當你的make不起作用的時候,嘗試一下設定“.PHONY”物件的值
- 至此,完成了一個基礎的Makefile的瞭解和編寫。
歡迎關注我的微信公眾號 ArthurSlog