2012-06-15 174 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才能工作.....感谢您的帮助。 –