Gnu-Make
gnuMake,如何覆蓋環境變數
目前我正在使用具有如下定義的 Makefile
MYLIB=/.../mylib-1.2.34
問題是對於不同的開發人員來說這些是不同的,每次結帳後都必須重新編輯文件是一件很痛苦的事。
所以我嘗試導出一個特定的環境變數,然後做
MYLIBX:=$(MYLIB_ENV) MYLIBX?=MYLIB
麻煩的是,如果沒有定義 MYLIB_ENV,它仍然會創建一個空的 MYLIBX,所以 ?= 不起作用。有沒有一種干淨的方法來做這個非常基本的事情?
我正在使用多年來開發的一組“豐富”的 make 文件,這些文件可以執行各種操作,例如 make 和相互呼叫,因此無法進行深度更改。
解決方案
雙洗牌。MYLIB 已經定義。
MYLIB_ENV?=MYLIB MYLIB:=MYLIB_ENV
問題與
MYLIB:=$(MYLIB_ENV) MYLIB?=/.../mylib-1.2.34
是
MYLIB
始終在第一行中定義的,因此第二行永遠不適用。這種情況下的典型方法是
MYLIB?=/.../mylib-1.2.34
這樣,個別開發人員可以在 shell 中指定他們自己的值,或者在
make
命令行上make MYLIB=...
或在他們的環境中執行之前
make
export MYLIB=... make
(所以他們可以設置一次,例如在他們的 shell 啟動腳本中,然後忘記它)。
如果你只是跑
make
如果不為 指定值
MYLIB
,則使用預設值/.../mylib-1.2.34
。另一種選擇是確定 Makefile 的儲存位置,但這並不適用於所有情況(特別是如果 Makefile 的路徑包含空格)。