【问题标题】:VAR evaluation in MakefileMakefile 中的 VAR 评估
【发布时间】:2017-03-19 16:20:52
【问题描述】:

我想要make wheel 打印轮子名称

cat Makefile
wheel:
    @rm -fr build dist
    @python setup.py bdist_wheel
    $(eval WHEEL=$(shell find . -name '*.whl'))
    @printf '\n => wheel ready %s\n\n' $(WHEEL)

几乎有效,因为在调用 setup.py 之前评估了 eval,dist 文件夹为空。

我也试过WHEEL:=$(shell find . -name '*.whl'),结果一样

【问题讨论】:

  • 在每个命令前加上@ 是一种反模式。如果您不想看到打印的命令,请使用 make -s 运行。
  • 如果您需要find在创建后找到您的wheel文件,则需要修复您的构建过程。
  • 除非您将.ONESHELL: 设置为伪目标,否则配方中的每一行都会单独执行。

标签: python bash makefile


【解决方案1】:

将结果放入变量中似乎完全是错误的。

wheel:
    @rm -fr build dist
    python setup.py bdist_wheel
    @printf '\n => wheel ready %s\n\n' $$(find . -name '*.whl')

printf 换行符看起来很古怪,但也许你喜欢虚假的空行。

【讨论】:

    【解决方案2】:

    使用不同的目标来创建文件。将命令存储在带有$(shell) 的变量中(您使用的是 GNU Make,对吗?),使用它将运行相关的命令:

    WHEEL = $(shell find . -name '*.whl')
    
    wheel: create_wheel
        printf '\n => wheel ready %s\n\n' $(WHEEL)
    
    create_wheel:
        @rm -fr build dist
        @python setup.py bdist_wheel
    

    您需要在分配命令时使用=,否则(使用:=)将在make 过程开始时对其进行评估。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-07
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      相关资源
      最近更新 更多