在shell脚本中使用makefile变量而不运行make

时间:2015-02-18 23:29:46

标签: linux bash shell makefile

我们有一个很大的make文件,它定义了许多有用的变量,比如TEST_ENV。我想创建一个位于同一目录下的shell脚本,并想知道是否有任何方法可以使用shell脚本中Makefile中定义的变量。我感兴趣的变量都是这样定义的

TEST_ENV := PATH=/path/to/thing \
            CONFDIR=/another/path

host_installdir = /still/a/path

我希望脚本使用Makefile的原因是,如果需要在Makefile中更改变量,那么shell脚本将不会过时。

我发现了this相关问题,但希望有一种方法可以做到这一点而无需先运行make。

我考虑过以某种方式在Makefile上使用grep的可能性,但是有些变量是在多行中定义的,这使得它变得棘手且易碎(例如,如果我为3行中定义的变量执行grep -A 3 ,如果稍后添加第4行怎么办?)。

2 个答案:

答案 0 :(得分:2)

您可以在makefile中使用Makefile hacks: print the value of any variable中的print-%目标(的修改版本)来查询它的值。

print-%:
        @echo '$(subst ','\'',$($*))'

答案 1 :(得分:1)

TEST_ENV=$(make -qp | awk -F' = ' '$1=="TEST_ENV" {print $2}')

我确定有一些无法处理的边缘情况,但这是一个不错的开始。初步测试显示它处理多行变量。