Make:覆盖一个标志

Sun*_*nny 3 overriding makefile compiler-flags

我对快速覆盖-Werror标志的反应有点困惑

所以我在这里问我的具体问题.

我有多个Makefile一起工作,CFLAGS已经设置为(-Werror -Wall ..和许多其他人)

但是在其中一个Makefile中,我希望错误不被视为警告,所以我想删除-Werror标志.

实现这一目标的最佳方法是什么,以便只有这个Makefile,-Werror标志被删除,而其他人正常执行?

谢谢,Sunny

and*_*otn 5

正确的方法是使用该filter-out功能.

CFLAGS := $(filter-out -Werror,$(CFLAGS))
Run Code Online (Sandbox Code Playgroud)

在您要覆盖它的Makefile中-Werror,CFLAGS将在该Makefile中删除该部分.

您甚至可以使用此方法通过使用特定目标的变量值来覆盖单个目标的标志:

CFLAGS = -Werror

all: foo bar

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

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

bar:
        echo cc $(CFLAGS) -o $@
Run Code Online (Sandbox Code Playgroud)

foo将使用默认CFLAGS包含构建-Werror,但bar不会构建.

这是一个通用的解决方案,适用于所有程序的所有参数,而不是要求每个程序--no-foo为每个--foo选项提供一个.因为无法从Make命令行完成,所以它不直接回答您链接的问题.但是,从命令行覆盖Make变量以强制构建内容是一种非常好的方法,可以使您的unbuildable代码更难以维护!