在宏定义中设置变量的推荐方法是什么?

时间:2012-12-25 06:56:16

标签: makefile

我在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 命令。

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

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

感谢。

1 个答案:

答案 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接受一个论点。