如何在运行make时列出Makefile中所有变量(也称为宏)的当前值?
例如,如果它在Makefile中:
CUR-DIR := $(shell /bin/pwd)
LOG-DIR := $(CUR-DIR)/make-logs然后我想让它告诉我:
CUR-DIR = /home/johv/src/test
LOG-DIR = /home/johv/src/test/make-logs发布于 2011-08-22 16:13:18
我最终是这样做的:
gmake -pn | grep -A1 "^# makefile"| grep -v "^#\|^--" | sort | uniq > makevars.txt这就给出了:
CUR-DIR := /home/johv/src/test
LOG-DIR := /home/johv/src/test/make-logs
MAKEFILE_LIST := Makefile
MAKEFLAGS = pn
SHELL = /bin/sh
VARS_OLD := [...]gmake -pn非常冗长,看起来有点像这样:
# environment
GNOME2_PATH = /usr/local:/opt/gnome:/usr:/usr/local:/opt/gnome:/usr
# automatic
@F = $(notdir $@)
# makefile
SHELL = /bin/sh
# default
RM = rm -f发布于 2011-08-19 17:16:53
GNU make提供了.VARIABLES,它保存所有全局变量的名称。但是,这包括内置变量(如MAKEFLAGS)。如果您必须排除内置变量,则可能需要像下面这样的过滤。下面的makefile使用info打印用户定义的变量(CUR-DIR、LOG-DIR
VARS_OLD := $(.VARIABLES)
CUR-DIR := $(shell pwd)
LOG-DIR := $(CUR-DIR)/make-logs
$(foreach v, \
$(filter-out $(VARS_OLD) VARS_OLD,$(.VARIABLES)), \
$(info $(v) = $($(v))))(我将CURDIR重命名为CUR-DIR,因为CURDIR似乎是我系统中的一个内置变量)
发布于 2015-09-25 02:05:11
感谢@Ise Wisteria,压缩下来,它显示了所有变量,对于具有多个makefile (Buildroot)的大型项目很有用。
$(foreach v, $(.VARIABLES), $(info $(v) = $($(v))))输出:BR2_GCC_TARGET_TUNE = "cortex-a8" ...
如果你得到一个像这样的错误:insufficient number of arguments (1) to function 'addprefix'这个项目有一些损坏的变量...我修剪了要显示的变量列表,只使用了前缀BR2_
$(foreach v, $(filter BR2_%,$(.VARIABLES)), $(info $(v) = $($(v))))https://stackoverflow.com/questions/7117978
复制相似问题