gpt4 book ai didi

makefile - 从命令行传递附加变量到 make

转载 作者:行者123 更新时间:2023-12-02 12:23:18 31 4
gpt4 key购买 nike

我可以将变量作为命令行参数传递给 GNU Makefile 吗?换句话说,我想传递一些参数,这些参数最终将成为 Makefile 中的变量。

最佳答案

您有多种选项可以从 makefile 外部设置变量:

  • 来自环境 - 每个环境变量都会转换为具有相同名称和值的 makefile 变量。

    您可能还想设置 -e 选项(又名 --environments-override),并且您的环境变量将覆盖 makefile 中的分配(除非这些分配自己使用 override directive ,但是不推荐,使用 ?= 赋值会更好更灵活(条件变量赋值运算符,只有在变量尚未定义时才有效) ):

    FOO?=default_value_if_not_set_in_environment

    请注意,某些变量不是从环境继承的:

    • MAKE 从脚本名称中获取
    • SHELL 要么在 makefile 中设置,要么默认为 /bin/sh (基本原理:命令在 makefile 中指定,并且它们是特定于 shell 的) .
  • 从命令行 - make 可以将变量赋值作为命令行的一部分,与目标混合在一起:

    make target FOO=bar

    但是,makefile 中对 FOO 变量的所有赋值都将被忽略,除非您使用 override directive在作业中。 (效果与环境变量的 -e 选项相同)。

  • 从父 Make 导出 - 如果从 Makefile 调用 Make,通常不应显式编写如下所示的变量赋值:

    # Don't do this!
    target:
    $(MAKE) -C target CC=$(CC) CFLAGS=$(CFLAGS)

    相反,更好的解决方案可能是导出这些变量。导出变量会使其进入每个 shell 调用的环境中,并且从这些命令中进行调用会选择上面指定的这些环境变量。

    # Do like this
    CFLAGS=-g
    export CFLAGS
    target:
    $(MAKE) -C target

    您还可以使用不带参数的 export 导出所有变量。

关于makefile - 从命令行传递附加变量到 make,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2826029/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com