2016-04-15 9 views
1

ではありません。私は特定のターゲットに沿っているかどうかに基づいて、g++の異なるインスタンスを使用できるMakefileを作ろうとしています。だから:私がmake homeを実行した場合、に実行可能なg++CCに、それ以外の場合には長いパス<longpath>/binにします。
だから、私は、ターゲットのチェックを試してみました:Makefileには空白だと書かれていますが、それは

ifeq ("$(TARGET)", "home") 
    GCCPATH = /usr 
    HSPARG = home 
endif 

$(info "$(TARGET)") 
$(info "[email protected]") 

GCCPATH ?= <longpath> 
CC = $(GCCPATH)/bin/g++ 
GCCLIBPATH = $(GCCPATH)/lib64 

しかし、これの結果は次のとおりです。

$ make home 
"" 
"" 
<further build information> 

GCCPATH<longpath>に等しいすべての機会です。

私の質問は次のとおりです:
1.私は間違って何をしますか?
2.修正方法

答えて

2

まず、make homeは、TARGETからhomeに設定されていません。したがって、設定するにはmake TARGET='home'を実行する必要があります。

第2に、makeは、カンマの後にスペースを含めてスペースを考慮します。だから、ifeq ("$(TARGET)", "home")と書いたとき、makeは、あなたが予想したようにコンマの後にスペースを投げ捨てていませんでした。だからmakeは「家」と「家」の比較で終わった。
make TARGET=' home'を実行して何が得られるかを見て、これを見ることができます。そのスペースを削除して、問題を修正します。

あなたの引用はすべてmakeでも何もしていないと言われました。それは一般的には気にしません。引用符はほとんどすべての場所で(ちょうどifeq "arg1" "arg2"の場合を除いて、そしておそらく1つまたは2つの他の場所を除いては私が考えることはできません)リテラルな文字ですので、$(info)への呼び出しでそれらを必要としません。あなたのifeqテストでもifeq (arg1,arg2)バージョンを使用しているためです。

関連する問題