我有先設置一些變量運行另外一些make目標生成文件:取消設置在生成文件的環境變量
make -C somedir/ LE_VAR=/some/other/stuff LE_ANOTHER_VAR=/and/so/on
現在我需要取消LE_VAR(真的沒有設置,不僅覆蓋值與「」)。
有什麼辦法可以這麼做GNU Make 3.81?
謝謝!
我有先設置一些變量運行另外一些make目標生成文件:取消設置在生成文件的環境變量
make -C somedir/ LE_VAR=/some/other/stuff LE_ANOTHER_VAR=/and/so/on
現在我需要取消LE_VAR(真的沒有設置,不僅覆蓋值與「」)。
有什麼辦法可以這麼做GNU Make 3.81?
謝謝!
非常感謝您的答覆,這是相當棘手。
當執行令,並在參數設置增值經銷商,如:
make -C le/path install ONEVAR=one OTHERVAR=two
我們有ONEVAR和OTHERVAR對env和子任務跑了第一個命令。這種困惑我,因爲我添加到任務(在LE /路徑)來執行一個簡單的bash腳本,只做:
echo $ONEVAR
unset ONEVAR
而且通過我吃驚的是變量$ ONEVAR竟是「一」(所以它在env上)並且unset實際上清除了它。但是,添加在Makefile文件「回聲$(ONEVAR)」仍然輸出「一」。這是由於MAKEOVERRIDES,而事實上,作爲建議的Communicating Options to a Sub-make:
命令行變量的定義真的出現在變量 MAKEOVERRIDES和MAKEFLAGS包含對此變量的引用。如果 你想傳遞國旗降正常,但不希望傳遞下去 在命令行中的變量定義,您可以重置MAKEOVERRIDES到 空的,就像這樣: MAKEOVERRIDES =
或者作爲MadScientist建議以上:)
但是這還不夠,因爲這個var仍然被傳遞給下面的其他子任務(在這種情況下,一些nodejs模塊正在本地文件夾上編譯,並且運氣不好,兩個js文件從phantomjs和其他使用具有相同名稱的變量的其他makefile(例如,$ ONEVAR)。
未導出變量告訴是否將特定的 變量導出到子進程。 GNU Make Appendix A Quick Reference
我所做的是:
DESTDIR_BUFFER=$(DESTDIR)
MAKEOVERRIDES := $(filter-out DESTDIR=%,$(MAKEOVERRIDES))
unexport DESTDIR
,然後才讓NPM安裝。
在此任務結束時,我將DESTDIR導出爲DESTDIR_BUFFER的值,其他所有後續任務仍然有效。
非常感謝您的幫助!
假設你的makefile包含像這樣來調用一個子品牌:
submake:
$(MAKE)
您需要修改的神奇變量MAKEOVERRIDES
,就像這樣:
MAKEOVERRIDES := $(filter-out LE_VAR=%,$(MAKEOVERRIDES))
unexport LE_VAR
submake:
$(MAKE)
仍然無法正常工作..它是一個var作爲參數傳遞給真正的env變量,還是讓它有另一種處理? – josetapadas
哦,我明白了;您正在運行子版本,並且您希望在調用子版本時從命令行中刪除該變量分配。我以爲你想從環境中刪除這個變量。 make命令行上的變量不是環境變量,它們是make變量。 – MadScientist
是的..我做了一個包裝腳本,做了'未設置'但仍然不工作:S真正的問題是,我有一個子node_module使用同名的var .. – josetapadas
檢查了這一點unexport variable
。 從GNU手冊
export variable
export variable-assignment
unexport variable
Tell make whether or not to export a particular variable to child processes
參考https://www.gnu.org/software/make/manual/html_node/Quick-Reference.html
你被允許改變第二個makefile,但不是第一個? – Beta