2012-03-25 12 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

:あなたは、外部シェルを呼び出すしたい場合は

は、あなたがshell機能を使用する必要がありますか?それで私は泣きたい! –

+0

同じ値に設定されていますか?例えば、コマンドを見つけることができない場合、コロンを含む '/ bin/sh:get_version.sh:command not found'にセットされ、その正確な問題が引き起こされます。 –

答えて

2

バッククォート( `)はBashのものであり、Makeのものではありません。あなたは1359行の長さ(少なくとも)のMakefileを持って

version=$(shell get_version.sh) 
+0

バッククニックはgnu makeで動作するようです。したがって、たとえ$(shell)が互換性のためにおそらくより良いとはいえ、それは問題の原因であってはなりません。 –

+0

@ JoachimIsaksson:それはあなたが「仕事」を意味するかどうかによって異なります。確かにそれらを評価しないでください。 –

+0

これは問題を解決しました、ありがとうございます! – user1291416