PatlaDJ
PatlaDJ

Reputation: 1249

Is GNU make wildcard able to match more complex patterns, like a regexp for example?

Let's say I have the following wildcard matches in a makefile:

data-files = $(wildcard $(ptdf)/*.png) \
    $(wildcard $(ptdf)/*.gif) \
    $(wildcard $(ptdf)/*.bmp) \
    $(wildcard $(ptdf)/*.jpg) \
    $(wildcard $(ptdf)/*.ico) \
    $(wildcard $(ptdf)/*.dist) \
    $(wildcard $(ptdf)/*.html)

Can the wildcard syntax give me the power to match, for example, file names containing from 1 to 2 letters, as the regexp \w{1,2} would do? With no filename extension?

If not, how can I do that with other syntax with linux command (such as find, etc)?

Upvotes: 3

Views: 5309

Answers (1)

andrewdotn
andrewdotn

Reputation: 34873

Downloading the source code and grepping for wildcard, we find the definition of the function on line 1332 of function.cwildcard calls string_glob, which just does globbing, not regular expressions. And grepping the source code for regex turns up nothing :/

Since make has no built-in regex function, we'll have to use an external command. grepping for regex on the find(1) man page shows that the following will work:

data-files = $(shell find . -regextype posix-extended -regex '.*\.\w{1,2}')

Upvotes: 8

Related Questions