Linux make 介紹/使用
tags: linux
Makefile是甚麼?
- Makefile是make命令的規則配置檔案
- 大致上說make是GNU中維護和組織程式用的
[name=Josh Ku]GNU(GNU’s Not Unix)是一個類Unix系統,目標是建立一套完全自由的作業系統(open source) Linux出現之後,與GNU結合成GNU/Linux
使用make的好處:
- 簡化編譯時所需下達的指令
- 可以將程式分成好幾個模組,在根據(target),規則(rule)去修改,可省去大量重複編譯的時間
- 若在編譯完成後,修改了某個原始檔案,則make僅會針對被修改的檔案進行編譯,其他的文件不會被更動。
- 最後可以依照相依性來更新執行檔。
使用方式:
- 在makefile中 #代表註解
- 需要再命令行的第一個字元
- target 與相依檔案之間以 : 隔開
變數的使用方法
與bash shell script的語法有點不相同需要注意
- 變數與變數內容以『=』隔開,同時兩邊可以有空格
- 變數左邊不可以有
- 變數與變數內容在『=』兩邊不能具有『:』
- 運用變數時,以${變數}或$(變數)使用
- 在指令模式也可以給予變數
變數基本賦值方法
name=Josh
Makefile 規則如下:
<target>: <prerequisites>
[tab] <commands>
- target 目標
- prerequisites 前置條件
- tab command 必須由tab隔開
- commands 只能有一行的shell
.PHONY 用法:
當我們設定的target和當前目錄下的檔名一樣的話,target會被忽略,所以我們把target都用做phony target
.PHONY: build start push
[name=Josh Ku] 表示,build start push 這3個target 不檢查當前目錄下的檔案,直接執行命令‧
範例:
NAME=JoshKU
VERSION= 1.0.0
.PHONY: build start push
build: build-version
build-version:
docker build -t {NAME}:${VERSION} .
tag-latest:
docker tag ${NAME}:${VERSION} ${NAME}:latest
start:
docekr run -it --rm ${NAME}:${VERSION} /bin/bash
push: build-version tag-latest
docker push ${NAME}:${VERSION}; docker push ${NAME}:latest
建構一個版本的映像
make build
建構完畢,執行一下映像,看內容是正確
make start
最後推送到docker倉庫
make push