Gnu-Make

gnuMake,如何覆蓋環境變數

  • March 12, 2017

目前我正在使用具有如下定義的 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 的路徑包含空格)。

引用自:https://unix.stackexchange.com/questions/350152