如何在makefile中追加文件路径

问题描述 投票:0回答:1

我在MacOS中的makefile中使用了下面的示例代码来构造路径,但是它始终不起作用。

all:
  ROOT=$(shell pwd)
  @echo $(ROOT)
  AGENT:=$(ROOT)/agent
  @echo $(AGENT)
  @mkdir -p $(AGENT)

它将输出为AGENT:=/agent,显然,AGENT变量未扩展为ROOT

macos makefile
1个回答
0
投票

这里有几个常见错误:

  1. 食谱行运行在单独的外壳中,您不能期望在一个外壳中分配的外壳变量仍在另一个外壳中定义。
  2. 无需在配方中使用$(shell...) make函数:配方已经是shell脚本。
  3. 您显然混淆了shell变量并制作了变量。
    • Shell变量分配有var=xxx=周围没有空格),仅在配方中(嗯,几乎只有)。它们使用$var${var}进行扩展,但从未使用$(var)进行扩展,仍然几乎仅在配方中进行扩展。
    • [Make variables]被分配了var := xxxvar = xxx:==周围有空格或无空格),仅在配方之外(几乎,仅)。它们用$(var)${var}进行扩展,而不用$var进行扩展。请注意,=:=不同,但这不在范围内。

尝试类似的事情,也许:

ROOT := $(shell pwd)
AGENT := $(ROOT)/agent

all:
    @echo $(ROOT)
    @echo $(AGENT)
    @mkdir -p $(AGENT)

[ROOTAGENT是make变量,在任何规则之外定义并且在任何配方中都可用。

注意:如果您使用的是GNU make,则CURDIR make变量已定义并扩展为当前工作目录。无需使用pwd,只需使用$(CURDIR)而不是$(ROOT)。如果ROOT指向Makefile所在的位置,并且您有可能使用-C-f make选项从其他地方调用make,也可以使用以下方法获取它:

ROOT := $(dir $(lastword $(MAKEFILE_LIST)))
© www.soinside.com 2019 - 2024. All rights reserved.