gnu make substring

时间:2012-06-15 17:50:23

标签: makefile cross-compiling

我是gnu make的新手。

我在附近搜索但是找不到任何有效的东西......
我有一个工具前缀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输出是相同的,但是当我理解了如何检查字符串是否在另一个内部时,我将修复它。
如果你知道更好的方法来自动化交叉开发建设吐出来的话:)

1 个答案:

答案 0 :(得分:2)

你的问题有点不清楚。如果要在任何规则之外更改变量:

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

如果要在规则内有条件地重命名文件:

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

您也可以将条件放在命令中,但我看不出你想要的原因。

相关问题