Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Make: Override a flag

I was a little confused with the responses to Quick way to override -Werror flag?

So I ask my specific question here.

I have multiple Makefiles working together and CFLAGS has been set along the way to (-Werror -Wall .. and many others)

But in one of the Makefiles, I wish that the errors not be treated as warnings and so I would like to remove -Werror flag.

What would be the best way to achieve this, so that only for this Makefile, -Werror flag is removed and for the others normal execution takes place?

Thanks, Sunny

like image 511
Sunny Avatar asked Oct 27 '25 05:10

Sunny


1 Answers

The right way to do this is with the filter-out function.

Put

CFLAGS := $(filter-out -Werror,$(CFLAGS))

in the Makefile where you want to override this, and the -Werror part of CFLAGS will be removed in that Makefile.

You can even use this to override flags for a single target by using target-specific variable values:

CFLAGS = -Werror

all: foo bar

foo:
        echo cc $(CFLAGS) -o $@

bar: CFLAGS := $(filter-out -Werror,$(CFLAGS))

bar:
        echo cc $(CFLAGS) -o $@

foo will be built with the default CFLAGS containing -Werror, but bar will be built without.

This is a general-purpose solution that works for all arguments to all programs, rather than requiring each program to supply a --no-foo for every --foo option. Because it can’t be done from Make command-line, it doesn’t directly answer the question you linked to. But overriding Make variables from the command-line to force stuff to build is a pretty good way to make your unbuildable code even less maintainable!

like image 170
andrewdotn Avatar answered Oct 30 '25 01:10

andrewdotn