我如何使用$(MAKEFLAGS)(或以其他方式将在命令行上定义的变量传递给sub-make)以支持从shell调用的方式使用make VAR=val和make -args?
我需要我的子项目可配置,但我讨厌autotools,所以我正在使用make变量,例如从shell调用:
$ make USE_SSE3=1
Run Code Online (Sandbox Code Playgroud)
并且USE_SSE3需要应用于所有子makefile中的所有构建.
手册指出:
如果你做'make -ks'那么MAKEFLAGS获得值'ks'.
因此我-$(MAKEFLAGS)在Makefile中使用(带有破折号前缀).
但是,当使用没有标志的变量时,它会扩展为无效参数.如果我跑:
$ make FOO=bar
Run Code Online (Sandbox Code Playgroud)
然后sub-make变得无效-FOO=bar.没有破折号前缀变量定义的OTOH工作,然后make -s等等.
是否有语法/变量/ hack使得传递参数和单独的变量定义与子makefile一起使用?
遗产$(MKFLAGS)没有奇怪的短划线前缀问题,但它也不包括变量定义.我已经尝试修复变量$(patsubst),但这只会通过修剪空白使事情变得更糟.
我需要的解决方案与Mac OS X Mavericks附带的过时的GNU Make 3.81兼容.
foo:
$(MAKE) -C subproject -$(MAKEFLAGS)
Run Code Online (Sandbox Code Playgroud)
$ make foo -s # MAKEFLAGS = 's'
$ make foo BAR=baz # MAKEFLAGS = 'BAR=baz'
$ make foo -j8 # MAKEFLAGS = ' --job-server=…'
Run Code Online (Sandbox Code Playgroud)
Mad*_*ist 12
你根本不应该设置MAKEFLAGS.你为什么这么想?你没有给出任何理由这样做.
MAKEFLAGS实际上,它是一个内部实现,它将参数从父make传递给child make.通常,它不是由makefile修改的.关于你可以有用的唯一事情就是添加新的标志.
如果你只使用$(MAKE)变量而不是硬编码来运行递归make make,那么Just Work:
recurse:
@$(MAKE) all FOO=bar
Run Code Online (Sandbox Code Playgroud)
管他呢.