第一個我不知道的點是 receipe
receipe 指的就是在某 target 下,要執行的 shell command,也就是由 tabe 字元縮排的那些列。
all:
@echo make all
- do something
上面每一列都是單獨的指令,換句話說,每一列都會新起一個 shell 來執行(預設行為)。
我有一個需求類似下面這樣
all:
ifeq ($(FLAG), xxx)
$(eval FOLDER = 001)
@cd $(FOLDER)
else ifeq ($(FLAG), yyy)
$(eval FOLDER = 002)
@cd $(FOLDER)
end
這段 code 是原本客戶的,我不太想大改它,只是把會變動的變數提取出來,剩下要做的 receipe 都一樣,因此就需要用 eval 的方式來設變數。
第二個我不知道的點是變數展開與環境變數間的優先性關係
FLAG ?= 0
ifneq ($(FLAG), 0)
BUILD_OPTS += XXXX
endif
上面這句其實有隱含假設環境變數 FLAG 也存在,就使用環境變數的值。
好死不死我的 bashrc 也宣告了一個同名的環境變數 FLAG。
於是便導致我 git push 後的檢查觸發行為跟別人不一樣,因為我的 FLAG 不等於 0。
不得不說,這些東西跟 AI 對話後,整個脈絡變得更清楚了。
我現在開始有點體會他說的話了。
下面是我跟 Claude Web 對話的一部分結果。
2026/03/20 洗完澡更新
剛剛才突然想到,如果跟 AI 討論《傷寒雜病論》會如何?
也許是時候跟他討論九陰真經了XD


沒有留言:
張貼留言