【问题标题】:MinGW / GNU Make - "multiple target patterns"MinGW / GNU Make - “多目标模式”
【发布时间】:2012-03-25 15:42:08
【问题描述】:

我在 Windows XP SP2 下使用 MinGW 3.18,GNU make 3.82。

我正在尝试将脚本返回的值合并到路径中并收到错误。

这行得通:

PROD_DIR=$(ROOT_DIR)/PROD
version=1.1.1

PROD_SOURCE_files = \
    file1 \
    file2

PROD_TARGET_files = $(patsubst %,$(PROD_DIR)/$(version)/%,$(PROD_SOURCE_files))

这不是:

PROD_DIR=$(ROOT_DIR)/PROD
version=`get_version.sh`

PROD_SOURCE_files = \
    file1 \
    file2

PROD_TARGET_files = $(patsubst %,$(PROD_DIR)/$(version)/%,$(PROD_SOURCE_files))

Makefile:1359: *** multiple target patterns.  Stop.

(第 1359 行是 PROD_TARGET_files 的定义)

我已经仔细检查了 $(version),它在两种情况下都具有相同的值,显然没有前导/尾随空格或换行符:

@echo [$(version)]
[1.1.1]

【问题讨论】:

  • 您有一个(至少)1359 行长的 Makefile?这让我想哭!
  • 您确定它设置为相同的值吗?例如,如果它找不到命令,它将被设置为 /bin/sh: get_version.sh: command not found,其中包含冒号,并会导致确切的问题。

标签: makefile mingw


【解决方案1】:

反引号 (`) 是 Bash 的东西,而不是 Make 的东西。

如果你想调用外部shell,你应该使用shell函数:

version=$(shell get_version.sh)

【讨论】:

  • 反引号似乎在 gnu make 中工作,所以即使 $(shell) 可能更好的兼容性,它不应该是问题的原因。
  • @JoachimIsaksson:这取决于您所说的“工作”是什么意思; Make 肯定不会评估它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多