为了账号安全,请及时绑定邮箱和手机立即绑定

从命令行传递其他变量来制作

从命令行传递其他变量来制作

从命令行传递其他变量来制作我可以将变量作为命令行参数传递给GNU Makefile吗?换句话说,我想传递一些最终会成为Makefile变量的参数。
查看完整描述

3 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

您有几个选项可以从makefile外部设置变量:

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

    您可能还想设置-e选项(aka --environments-override),您的环境变量将覆盖makefile中的赋值(除非这些赋值本身使用该override指令。但是,不建议这样做,并且使用?=赋值(条件变量)更好更灵活赋值运算符,它只有在尚未定义变量时才有效:):

    FOO?=default_value_if_not_set_in_environment

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

    • MAKE 是从脚本的名字得到的

    • SHELL要么在makefile中设置,要么默认为/bin/sh(基本原理:命令在makefile中指定,并且它们是特定于shell的)。

  • 从命令行 - make可以将变量赋值作为其命令行的一部分,与目标混合:

    make target FOO=bar

    但是,除非在赋值中使用该指令,否则将忽略makefile中变量的所有FOO赋值。(效果与环境变量选项相同)。override-e

  • 从父Make导出 - 如果从Makefile调用Make,通常不应该显式写这样的变量赋值:

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

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

    # Do like thisCFLAGS=-gexport CFLAGStarget:
            $(MAKE) -C target

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


查看完整回答
反对 回复 2019-07-31
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

最简单的方法是:

make foo=bar target

然后在你的makefile中你可以参考$(foo)。请注意,这不会自动传播到子品牌。

如果您正在使用子品牌,请参阅此文章:将变量传递给子品牌


查看完整回答
反对 回复 2019-07-31
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

假设您有一个这样的makefile:

action:
    echo argument is $(argument)

然后你会打电话给它 make action argument=something


查看完整回答
反对 回复 2019-07-31
  • 3 回答
  • 0 关注
  • 483 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信