2016-04-15 69 views
1

我想要一個Makefile,它能夠根據我是否給某個目標使用不同的g++實例。所以:如果我運行make home我想要CCg++可執行文件在/usr/bin,否則在某些長路徑<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'來設置它。

其次,make關心空格,包括逗號後面的空格。所以當你寫ifeq ("$(TARGET)", "home")make沒有像你可能預料的那樣在逗號後面丟掉空格。所以make最後比較的是「家」和「家」。
您可以通過運行make TARGET=' home'並查看所得結果來查看。刪除該空間,你會解決這個問題。

這就是說你所有的報價都沒有爲make做任何事情。它通常不關心。幾乎在所有地方(除了在ifeq "arg1" "arg2"個案等等,可能還有一兩個其他地方,但我想不出任何副手),引號只是文字字符,所以在撥打$(info)或因爲您使用的是ifeq (arg1,arg2)版本,所以即使在您的ifeq測試中。

相關問題