我有一個makefile
其中我試圖設置一些已存在於我寫的bash腳本中的變量:set-vars.sh
(它只包含變量名稱和值)。從bash腳本讀取makefile變量
我在其他bash
腳本中使用這些變量。我需要也可以在我的makefile
中使用它們。
經過大量研究並試圖找出makefile
中bash
腳本中設置變量的最佳方法後,我找到了一種可行的方法;這是如下:
set-vars.sh
:
# set vars
foo=FOO1
bar=BAR1
baz=BAZ1
# if a command line arg is given (e.g. foo)
# echo value command line arg (e.g. echo $foo)
if ! [ -z ${1+x} ]; then echo ${!1}; fi
這裏神奇的是最後一行,其echo
ES在命令行參數提供了其名稱的變量的值,如果有一個命令行參數。我在makefile
中調用此腳本並提供變量名稱,並使用echo
ed值設置makefile
變量。
Makefile
:
.PHONY: target1 target2 target3
export foo = $(shell sh set-vars.sh foo)
target1:
@echo $(foo)
# ... other targets which reference $(foo) ...
這工作,但它可能是做這件事的哈克方式。我想知道是否有更簡單,更優雅的方式來做我想做的事情。
我在StackOverflow上遇到過幾個類似的問題和答案,但沒有找到任何適用於我的示例的東西。如果我已經錯過了一個答案,請告訴我。
非常感謝!
你不能在調用'make'的shell中設置變量,或者將它們放在'make'命令行上? – Barmar
其他腳本需要'如果! [-z ...'line? – Beta
@Barmar,我不能把它們放在make命令行上,因爲這個makefile會被其他可能熟悉或者不熟悉這個makefile內部工作的人使用。我想保持makefile的調用盡可能簡單......但是,通過在調用'make'的shell中設置變量,你的意思是什麼?對不起,我不太精通shell腳本。 – tamjd1