我的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)
我知道代码路径正在执行中(通过在块中引入错误)。如何从命令目标中删除目标?
据我所知,您在这里不能做您想做的事。
您可以修改变量值,如果您自己检查该值,则将看到更改,但修改的值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)
| 归档时间: |
|
| 查看次数: |
4158 次 |
| 最近记录: |