gpt4 book ai didi

makefile - 为什么环境变量在 $(shell) 命令中不起作用?

转载 作者:行者123 更新时间:2023-12-04 02:17:16 26 4
gpt4 key购买 nike

export HELLO=Hello,world
all:
@echo $(HELLO)
@echo $(shell echo $$HELLO)
@echo `echo $$HELLO`

输出:
Hello,world

Hello,world

为什么反引号和 $(shell) 之间存在差异,有没有办法将环境变量传递给 $(shell) 调用?

我试图在交叉编译环境中使用 pkg-config,所以我需要设置 $PKG_CONFIG_SYSROOT。我可以使用反引号,但它对每个 .o 文件执行一次。根据 Computing Makefile variable on assignment ,我需要使用 PKG_CFLAGS := $(shell pkg-config $(PACKAGES)),但我无法传入所需的环境变量以使其正常工作。

在 GNU Make 4.0 上测试。

最佳答案

恭喜您遇到了 make 错误:$(shell) doesn't honor export but this is undocumented?

代码中有一条注释(在提交票证之前并在票证中引用),表明存在无法正常工作的复杂情况,因此似乎没有完成。

我可以想到两种方法来获得$(shell)环境使您想要手动设置的变量可用。

  • 将它们设置在 $(shell) 中上下文明确。
    PCVAR:=$(shell PKG_CONFIG_SYSROOT=$(make-level-variable-PKG_CONFIG_SYSROOT) pkg-config ...)
  • 将它们设置在 make 中处理环境,所以 $(shell)环境通常会继承它们。
    $ PKG_CONFIG_SYSROOT=/some/path make
  • 关于makefile - 为什么环境变量在 $(shell) 命令中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33159342/

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