我如何使用$(MAKEFLAGS)
(或将命令行上定义的变量传递给子制作的另一种方式)以支持从 shell 调用的方式使用make VAR=val
和make -args
?
我需要我的子项目可配置,但我讨厌自动工具,所以我为此使用 make 变量,例如从 shell 调用:
$ make USE_SSE3=1
并且USE_SSE3
需要应用于所有子 makefile 中的所有构建。
该手册指出:
如果您执行“make -ks”,则 MAKEFLAGS 将获得值“ks”。
因此,我-$(MAKEFLAGS)
在 Makefile 中使用(带有破折号前缀)。
但是,当使用没有标志的变量时,这会扩展为无效参数。如果我运行:
$ make FOO=bar
然后 sub-make 变得无效-FOO=bar
。OTOH 没有破折号前缀变量定义工作,然后 butmake -s
等不工作。
是否有语法/变量/hack 可以使参数的传递和单独的变量定义与子生成文件一起使用?
旧版$(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=…'