代码之家  ›  专栏  ›  技术社区  ›  Ainar-G

POSIX Make中目标的导出变量

  •  0
  • Ainar-G  · 技术社区  · 6 年前

    foo: export X=42
    foo:
        echo $$X
        # Call several more commands that use $X.
    

    有没有一种方法可以在便携式POSIX Make中实现这一点?到目前为止,我找到了两种方法。第一种是基本上将所有命令合并为一个命令:

    foo:
        export X=42; \
            echo $$X; \
            # Call several more commands that use $X.
    

    这是不好的,因为现在一切都捆绑在一起。第二是打电话 $(MAKE) :

    foo:
        $(MAKE) foo_ X=42
    foo_:
        echo $$X
        # Call several more commands that use $X.
    

    但这还有一个额外的电话要打。有更好的办法吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Renaud Pacalet    6 年前

    最简单的解决方案可能是通过调用make with在命令行上设置变量:

    make X=42
    

    这种方式:

    1. 品牌 X 变量被定义并设置为42,即使它被设置为Makefile中的另一个值。
    2. shell环境变量

    如果无法使用此选项(例如,因为是make计算值),则递归make解决方案可能是最佳选项:

    ifeq ($(X),)
    X := <some-make-magic>
    
    all:
        $(MAKE) X=$(X) all
    else
    all:
        <recipe-that-uses-X-environment-variable>
    endif