首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Makefile 變數賦值運算符比較:=、:=、?= 與 == 的行為差異

     編輯:程式設計綜合問答

四種運算符

運算符名稱行為範例
=遞歸/延遲展開賦值時不展開,使用時才遞歸展開VAR = $(OTHER) → 使用時才取 OTHER 當前值
:=立即/簡單展開賦值時**立即**展開右側,鎖定值VAR := $(OTHER) → 當下 OTHER 的值
?=條件賦值**僅當變數未定義**時賦值VAR ?= default → 若 VAR 已有值則保留
==非標準賦值Make 內建無此賦值運算符;條件判斷用 ifeq ($(VAR), value)可能為誤寫

實例演示

A = a
B = $(A) b   # 遞歸展開
C := $(A) c  # 立即展開

A = NEW_A

# 此時
$(info B = $(B))  # 輸出: B = NEW_A b  (跟隨 A 變化)
$(info C = $(C))  # 輸出: C = a c      (鎖定賦值時的值)

# 條件賦值
D ?= first
D ?= second
$(info D = $(D))  # 輸出: D = first  (第二次 ?= 不生效)

最佳實踐

  • 預設使用 := 避免意外的遞歸展開導致效能問題或難以除錯。
  • 環境變數覆蓋預設值時用 ?=:CC ?= gcc。
  • 複雜字串構建(如編譯旗標)用 := 鎖定。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved