gpt4 book ai didi

makefile - 从 MAKECMDGOALS 中删除目标?

转载 作者:行者123 更新时间:2023-12-02 20:17:28 25 4
gpt4 key购买 nike

我的 makefile 中有以下内容。它是一个 GNUmakefile,因此支持其他 make 功能:

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

运行它的结果是:

make ubsan
make: *** No rule to make target 'ubsan'. Stop.

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

最佳答案

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

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

如果你看Appendix A Quick Reference在 GNU Make 手册中你会看到它说:

MAKECMDGOALS

The targets given to make on the command line. Setting this variable has no effect on the operation of make.

See Arguments to Specify the Goals.

我认为,最接近您在这里尝试执行的操作的方法是手动重新执行 Makefile (或其他内容)。

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

$ cat Makefile
$(info $(origin UBSAN))
$ make
undefined
$ make UBSAN=
command line

所以像这样。

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

关于makefile - 从 MAKECMDGOALS 中删除目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31443920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com