Makefile MinGW/GNU Make-“;“多目标模式”;

Makefile MinGW/GNU Make-“;“多目标模式”;,makefile,mingw,Makefile,Mingw,我在WindowsXPSP2下使用Mingw3.18,GNUMake3.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_DI

我在WindowsXPSP2下使用Mingw3.18,GNUMake3.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行是产品目标文件的定义)

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

@echo [$(version)]
[1.1.1]
回击(`)是一种猛击,而不是制造

如果要调用外部shell,应使用以下函数:

version=$(shell get_version.sh)

您有(至少)1359行长的Makefile吗?这让我想哭!您确定它设置为相同的值吗?例如,如果它找不到该命令,则会将其设置为
/bin/sh:get_version.sh:command not found
,其中包含冒号,这将导致确切的问题。反勾号似乎在gnu make中工作,因此即使$(shell)在兼容性方面可能更好,这不应该是问题的原因。@JoachimIsaksson:这取决于你所说的“工作”是什么意思;Make当然不会对它们进行评估。