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を指定してinstallコマンドを呼び出します。

  • マクロ定義に変数を設定するために、eval関数を使用します
  • ORIG_INSTALL_FILE_MODEがローカルであることを確認するために、マロの最後に空にリセットします

これは、マクロ定義内の「ローカル変数」を操作する正しい方法である必要がありますか?

ありがとう。

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 に答える