# Makefile ## 教學 https://blog.goodjack.tw/2023/01/use-makefile-to-manage-workflows-for-web-projects.html ```typescript # 新增變數變給定預設值 CONTAINERS ?= workspace mysql IS_ROOT ?= false ENVIRONMENT ?= dev MYIP = ${shell curl -s ipinfo.io/ip} # 這些 target 不需要跳過 # PHONY 是 makeFile 保留字 .PHONY: up stop zsh # make up 先執行 .env stage 如果有 .env 的檔案該 stage 就不會被執行。 # .env 同時是 stage name 跟 file name up: .env # ${info 你要顯示得內容} 這是 make file 的 logger 用法 , $@ 表示當前的 stage ${info 目前環境為 ${ENVIRONMENT}} $(info 目前執行的 Target 是 $@) $(info 啟動 workspace) @echo finish up stage # 或是在各的 target 宣告 .PHONY .PHONY: up down: docker compose down .PHONY: down zsh: docker compose exec workspace zsh .env: ${info .env 檔案不存在建立 .env 檔案} ifeq (${ENVIRONMENT},dev) cp .env.example .env else cp .env.example.production .env endif test_variable: @echo ${CONTAINERS} condition: ifeq ($(IS_ROOT),true) @echo IS_ROOT is auth else @echo IS_ROOT is not auth endif .PHONY: condition ip: ${info 我的 ip: ${MYIP}} .PHONY: ip # :: 可以拆分 stage prerequisite:: ${info 我先執行這邊} prerequisite:: ${info 在執行這邊} .PHONY: prerequisite test: .AAA @echo 1 .AAA: @echo AAA ```