【问题标题】:exporting env variables from a common target to all targets in Makefile将环境变量从公共目标导出到 Makefile 中的所有目标
【发布时间】:2020-09-23 11:47:36
【问题描述】:

我有一个共同的目标,就是在 Makefile 中设置一堆类似这样的环境变量

# file common.mk
setup :
    export LD_LIBRARY_PATH=${MY_HOME}/LIBS:${LD_LIBRARY_PATH}
    export MY_VERSION=2.2
    ...

现在我想在所有 make 目标中使用这些变量

#file Makefile

include ${MY_RUN_DIR}/common.mk
run : setup
    # export all the variables 
    # do domething

现在当我执行make run 时,我看不到正在设置的变量。这是因为所有变量都仅在“设置”目标中设置。 我有 100 多个 Makefile,我必须在其中添加所有导出变量,我宁愿只添加一行来导出所有变量。

如何将变量从一个目标导出到我想要的所有目标?

【问题讨论】:

  • 只是为了指出显而易见的,变量甚至不会导出到 setup 目标内,除非您使用 .ONESHELL 或类似的。变量分别在 一个单独的 shell 调用中导出,当该 shell 终止并执行下一个配方行时,它们不再存在。这是一个常见的初学者错误和常见的常见问题解答;见stackoverflow.com/questions/42157800/…

标签: makefile gnu-make


【解决方案1】:

只是不要将作业放在规则中:

# file common.mk

export LD_LIBRARY_PATH=${MY_HOME}/LIBS:${LD_LIBRARY_PATH}
export MY_VERSION=2.2
...

不要为先决条件而烦恼setup

#file Makefile

include ${MY_RUN_DIR}/common.mk
run:
#  do something, such as
    @echo my version is $$MY_VERSION

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多