在没有 运行 make 的 shell 脚本中使用 makefile 变量
using makefile variables in shell script without running make
我们有一个很大的 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 的可能性,但是一些变量是跨多行定义的,这使得它变得棘手和易碎(例如,如果我对跨定义的变量执行 grep -A 3 3 行,如果稍后添加第 4 行怎么办?)。
TEST_ENV=$(make -qp | awk -F' = ' '=="TEST_ENV" {print }')
我敢肯定有一些边缘情况它无法处理,但这是一个不错的开始。初步测试表明这可以处理多行变量。
您可以在 makefile 中使用 Makefile hacks: print the value of any variable 中的 print-%
目标(的修改版本)来查询它的值。
print-%:
@echo '$(subst ','\'',$($*))'
我们有一个很大的 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 的可能性,但是一些变量是跨多行定义的,这使得它变得棘手和易碎(例如,如果我对跨定义的变量执行 grep -A 3 3 行,如果稍后添加第 4 行怎么办?)。
TEST_ENV=$(make -qp | awk -F' = ' '=="TEST_ENV" {print }')
我敢肯定有一些边缘情况它无法处理,但这是一个不错的开始。初步测试表明这可以处理多行变量。
您可以在 makefile 中使用 Makefile hacks: print the value of any variable 中的 print-%
目标(的修改版本)来查询它的值。
print-%:
@echo '$(subst ','\'',$($*))'