2012-12-25 72 views
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是當地,我重置它在馬老年底清空

這應該是正確的方式來操縱宏定義內的「局部變量」?

謝謝。

+0

似乎我們不能直接在宏內部定義一個make變量,除非你使用$(shell)而不是$(call)來調用宏,在這種情況下,變成一個shell變量,而不是make變量 –

回答

1

有一種更乾淨的方式來做你想做的事。關鍵是要保持擴張的仔細記錄,在這種情況下使用簡單擴展型變量,以避免一個循環定義:

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

不過我勸你完全沒有這些局部變量的事,並有InstallFile接受論據。

+0

調用此宏時出錯:'gmake:ORIG_INSTALL_FILE_MOD:Command not found',這是一種在宏定義中直接指定變量的有效語法嗎? –

相關問題