2012-03-25 5 views
2

Я использую MinGW 3.18 под Windows XP SP2, 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 строк? Это заставляет меня хотеть плакать! –

+0

Уверена, что у него установлено одно значение? Например, если он не может найти команду, он будет установлен в '/ bin/sh: get_version.sh: command not found', который содержит двоеточия и вызовет эту точную проблему. –

ответ

2

Backticks (`) - вещь Bash, а не вещь.

Если вы хотите, чтобы взывать к внешней оболочке, вы должны использовать shell функцию:

version=$(shell get_version.sh) 
+0

Backticks, похоже, работают в gnu make, поэтому даже если $ (shell), вероятно, лучше подходит для совместимости, это не должно быть причиной проблемы. –

+0

@JoachimIsaksson: Это зависит от того, что вы подразумеваете под «работой»; Разумеется, они не оценивают их. –

+0

Это решило проблему, спасибо большое! – user1291416

Смежные вопросы