2012-06-15 166 views
1

我是gnu make的新手。gnu make substring

我四處搜尋,但我無法找到任何工作...
我有工具前綴suxh名單爲:

DEFTOOL= /usr/bin/i686-mingw32- /usr/bin/x86_64-w64-mingw32- /usr/bin/ 

我想改變的二進制文件的擴展名,如果字符串「MinGW的」

$(foreach c, $(DEFTOOL),$(call dist_make, $(c))) 
... 
define dist_make 
result= ${shell echo $(1) | grep mingw } 
echo x$(result)x 
# $(if $(result),\ 
# $(1)gcc $(DIST_CFLAGS) -o cap2hccap$(WINEXT) ./cap2hccap.c; echo "windows";, 
# $(1)gcc $(DIST_CFLAGS) -o cap2hccap$(LNXEXT) ./cap2hccap.c; echo "linux"; \ 
#) 

endef 

其中LNXEXT爲空且WINEXT爲「.exe」。
我不能得到這個工作....
我怎麼知道,如果該函數的參數包含「mingw」?

PS:
我知道64位和32位mingw輸出是相同的,但是當我理解如何檢查一個字符串是否在另一個字符串中時我會修復它。
如果你知道一個更好的方法來自動化交叉開發建設吐出:)

回答

2

你的問題是有點不清楚。如果你想改變一個變量,任何規則之外:

ifneq ($(findstring mingw,$(DEFTOOL)),) 
FILENAME = foo.xxx 
endif 

如果要有條件地規則中重命名文件:

someTarget: 
ifneq ($(findstring mingw,$(DEFTOOL)),) 
    mv foo.aaa foo.xxx 
endif 

你也可以把有條件的命令內,但我看不出爲什麼你想要。

+0

謝謝!來自[link](http://www.gnu.org/software/make/manual/html_node/Text-Functions.html):$(findstring a,abc) $(findstring a,bc) 產生值' a'和''(空字符串)。請參閱測試標誌,瞭解findtring的實際應用。 ...所以我認爲只有當字符串在字符串列表中時findtring才能工作.....感謝您的幫助。 –