从MAKECMDGOALS中删除目标?

jww*_*jww 8 makefile gnu-make

我的makefile文件中包含以下内容。其为GNUmakefile,因此支持其他制造功能:

# Undefined Behavior Sanitzier (Clang and G++)
ifeq ($(findstring ubsan,$(MAKECMDGOALS)),ubsan)
CXXFLAGS += -fsanitize=undefined
MAKECMDGOALS := $(subst ubsan,,$(MAKECMDGOALS))
endif # UBsan    
Run Code Online (Sandbox Code Playgroud)

运行它会导致:

make ubsan
make: *** No rule to make target 'ubsan'. Stop.
Run Code Online (Sandbox Code Playgroud)

我知道代码路径正在执行中(通过在块中引入错误)。如何从命令目标中删除目标?

Eta*_*ner 6

据我所知,您在这里不能做您想做的事。

您可以修改变量值,如果您自己检查该值,则将看到更改,但修改的值MAKECMDGOALS不会以任何方式影响make。

如果查看GNU Make手册中的附录A快速参考,您会看到它说:

制作目标

在命令行上给出的目标。设置此变量对make的操作没有影响。

请参阅指定目标的参数

我认为,最接近您要在此处尝试执行的Makefile操作的方法是手动重新执行(或执行任何操作)make 。

话虽这么说,这种事情可能最好作为变量而不是目标来完成。

$ cat Makefile
$(info $(origin UBSAN))
$ make
undefined
$ make UBSAN=
command line
Run Code Online (Sandbox Code Playgroud)

像这样

# Undefined Behavior Sanitzier (Clang and G++)
ifneq (undefined,$(origin UBSAN))
CXXFLAGS += -fsanitize=undefined
endif # UBsan
Run Code Online (Sandbox Code Playgroud)