2012-03-25 83 views
2

我在Windows XP SP2下使用MinGW 3.18,GNU make 3.82。MinGW/GNU Make - “多个目标模式”

我试图将路径中的脚本返回值并接收错误。

这工作:

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的定义)

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

@echo [$(version)] 
[1.1.1] 
+4

你有一个Makefile(至少)1359行代码?这让我想哭! – 2012-03-25 15:49:05

+0

你确定它设置为相同的值吗?例如,如果它找不到命令,它将被设置为'/ bin/sh:get_version.sh:command not found',其中包含冒号并会导致严重问题。 – 2012-03-25 15:57:57

回答

2

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

如果你想调出一个外壳,你应该使用shell功能:

version=$(shell get_version.sh) 
+0

反引号似乎在gnu make中起作用,所以即使$(shell)对于兼容性可能更好,也不应该是问题的原因。 – 2012-03-25 16:02:17

+0

@JoachimIsaksson:这取决于你的意思是“工作”;当然不会评估它们。 – 2012-03-25 16:04:21

+0

这解决了这个问题,非常感谢! – user1291416 2012-03-25 16:09:27