tux_mind
tux_mind

Reputation: 306

gnu make substring

i'm new to gnu make.

i searched around but i cannot find anything working...
I have a list of tool prefix suxh as:

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

I want to change the extension of the binary file if string "mingw" is in the current tool, so

$(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

where LNXEXT is empty and WINEXT is ".exe".
i cannot get this working....
how can i known if the argument of the function contains "mingw" ?

PS:
i known that the 64bit and the 32bit mingw output is the same but i will fix it when i have understood how check if a string is inside another.
If you known a better way to automate cross dev building spit it out :)

Upvotes: 2

Views: 3871

Answers (1)

Beta
Beta

Reputation: 99134

Your question is a little unclear. If you want to change a variable, outside of any rule:

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

If you want to rename a file conditionally within a rule:

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

You could also put the conditional within the command, but I can't see why you'd want to.

Upvotes: 2

Related Questions