0

我在 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 作为其文件模式。

  • 为了在宏定义中设置变量,我使用eval函数
  • 为了确保 ORIG_INSTALL_FILE_MODE 是本地的,我在 maro 结束时将其重置为空

这应该是在宏定义中操作“局部变量”的正确方法吗?

谢谢。

4

1 回答 1

1

有一种更清洁的方法来做你正在尝试的事情。诀窍是仔细跟踪扩展,在这种情况下,使用简单的扩展变量来避免循环定义:

define InstallWithPermission
  ORIG_INSTALL_FILE_MODE := $(INSTALL_FILE_MODE)
  INSTALL_FILE_MODE := $(1)
  $$(InstallFile)
  INSTALL_FILE_MODE := $$(ORIG_INSTALL_FILE_MODE)
endef

但我建议你完全不用这些局部变量,并InstallFile接受一个论点。

于 2012-12-25T14:07:02.910 回答