我在gmake中定义一个宏来在调用底层函数之前设置一个变量,然后重置它:
define InstallWithPermission
$(eval ORIG_INSTALL_FILE_MODE = $(INSTALL_FILE_MODE))
$(eval INSTALL_FILE_MODE = $(1))
$(InstallFile)
$(eval INSTALL_FILE_MODE = $(ORIG_INSTALL_FILE_MODE))
$(eval ORIG_INSTALL_FILE_MODE = )
endef
这里$(InstallFile)将使用INSTALL_FILE_MODE作为其文件模式调用 install 命令。
这应该是在宏定义中操纵“局部变量”的正确方法吗?
感谢。
答案 0 :(得分:1)
有一种更清洁的方式来做你正在尝试的事情。诀窍是要仔细跟踪扩展,在这种情况下,只使用扩展变量来避免循环定义:
define InstallWithPermission
ORIG_INSTALL_FILE_MODE := $(INSTALL_FILE_MODE)
INSTALL_FILE_MODE := $(1)
$$(InstallFile)
INSTALL_FILE_MODE := $$(ORIG_INSTALL_FILE_MODE)
endef
但是我建议你完全没有这些局部变量,让InstallFile
接受一个论点。