2012-10-12 37 views
4

我想告訴(g)使包含來自單獨文件的一些常見初始化知道包含文件相對於主Makefile的相對位置。如何在運行時計算gmake中當前的Makefile位置

但是在手冊中,我找不到任何內置變量,例如,會給你當前Makefile的名稱。

例如,如果我想在同一個目錄作爲當前make文件一個文件的內容,而不是硬接線的位置包括:

# MAIN Makefile : ./scripts/make/TaskA.mk 

include ./scripts/make/Common.inc 
... 

我想寫點東西像下面的假設_MAKEFILE_包含TaskA.mk位置:

# MAIN Makefile : ./scripts/make/TaskA.mk 

MAKEFILE_DIR=$(dirname $(_MAKE_FILE_)) 

include $(MAKEFILE_DIR)/Common.inc 

回答

6

不手動give a recipe based on MAKEFILE_LIST

基本上

this_makefile := $(lastword $(MAKEFILE_LIST)) 
任何 include指令前

應該做的伎倆。

+0

Oups,我想我應該發現它,它的工作原理!謝謝! –

+0

@ValentinRuano嗯,它有助於記住看到它一次,因爲它沒有說「這是你如何得到當前的生成文件」在任何地方。 – dmckee

4

看看GNU make - Other Special VariablesMAKEFILE_LIST包含所有的Makefiles讀取。所以,如果你拿第一個並提取目錄,你就完成了。

MAKEFILE_DIR=$(dir $(firstword $(MAKEFILE_LIST))) 

include $(MAKEFILE_DIR)Common.inc 
+1

你*真的*想要在這裏使用':='賦值,並將語句放在任何'include'之前。 – dmckee

+0

感謝它的工作! –