gpt4 book ai didi

makefile - 递归制作: correct way to insert `$(MAKEFLAGS)`

转载 作者:行者123 更新时间:2023-12-04 06:03:42 25 4
gpt4 key购买 nike

如何使用$(MAKEFLAGS)(或将命令行上定义的变量传递给sub-make的另一种方式),以支持同时使用make VAR=valmake -args从shell调用的方式?

我需要可配置的子项目,但我讨厌自动工具,因此我为此使用了make变量。从shell调用:

$ make USE_SSE3=1

并且 USE_SSE3需要应用于所有子makefile中的所有构建。

The manual指出:

if you do ‘make -ks’ then MAKEFLAGS gets the value ‘ks’.



因此,我在我的Makefile中使用了 -$(MAKEFLAGS)(带破折号)。

但是,当使用不带标志的变量时, 扩展为无效参数。如果我运行:
$ make FOO=bar

然后sub-make获取无效的-FOO=bar。没有破折号前缀变量定义的OTOH有效,但是make -s等无效。

是否有语法/变量/hack可以使参数传递和单独的变量定义与子makefile一起使用?

传统的$(MKFLAGS)没有怪异的破折号前缀问题,但它也不包含变量定义。我尝试用$(patsubst)修复变量,但这只会因修剪空白而使情况变得更糟。

我需要该解决方案与Mac OS X Mavericks随附的过时的GNU Make 3.81兼容。
foo:
$(MAKE) -C subproject -$(MAKEFLAGS)
$ make foo -s       # MAKEFLAGS = 's'
$ make foo BAR=baz # MAKEFLAGS = 'BAR=baz'
$ make foo -j8 # MAKEFLAGS = ' --job-server=…'

最佳答案

您根本不应该设置MAKEFLAGS。你为什么要您没有任何理由这样做。
MAKEFLAGS实际上是要作为内部实现,将参数从父品牌传递给子品牌。通常,它不希望由makefile进行修改。您唯一可以做的有用的事情就是添加新标志。

如果您仅使用$(MAKE)变量而不是对make进行硬编码来运行递归make,那么它将正常工作:

recurse:
@$(MAKE) all FOO=bar

管他呢。

关于makefile - 递归制作: correct way to insert `$(MAKEFLAGS)` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19611004/

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