2017-01-18 122 views
0

我有一個makefile,看起來是這樣的:如何將目錄添加到GNU Make的搜索路徑?

include anotherFile.mk 

all: 
    someStuff 

文件anotherFile.mk是這樣的:

include yetAnotherFile.mk 
export SOME_VAR = 93 

的問題是,anotherFile.mkyetAnotherFile.mk是從我的Makefile不同的目錄。所以,我的makefile不能只是改成這樣:

include $(OTHER_PROJECT_PATH)/anotherFile.mk 

all: 
    someStuff 

這種方法的問題是,包括anotherFile.mk語句將失敗,因爲它會在當前目錄中搜索。

我找到的部分解決方案是將--include-dir=$OTHER_PROJECT_PATH標誌傳遞給make的調用,但這對用戶不友好。

所以我的問題是:有什麼我可以放在我的生成文件,將添加到執行include時進行搜索的目錄?類似於MAKE_INCLUDE_DIRS += $(OTHER_PROJECT_PATH)

回答

1

令人驚訝的是,似乎並沒有很好的回答這個問題。強制.INCLUDE_DIR沒有幫助,似乎沒有任何辦法可以調用make--include-dir=$OTHER_PROJECT_PATH

但是,可以在makefile中放入適當的遞歸make調用,但爲了讓它適用於所有合理的情況,它很快就變得非常複雜,不值得。總之它需要:檢查

  • 頂級狀態,如果OTHER_PROJECT_PATH.INCLUDE_DIR
  • 適當的目標與配方調用make遞歸
  • 可能還有其他的目標,如果有多個命令目標
  • else部分條件中包含的真實make文件

您的Makefile如下所示:

OTHER_PROJECT_PATH := other 
ifeq (,$(filter $(OTHER_PROJECT_PATH), $(.INCLUDE_DIRS))) 
# this is the mechanism to add the include dir in a recursive make 
$(or $(firstword $(MAKECMDGOALS)),all): 
    $(MAKE) -I$(OTHER_PROJECT_PATH) $(MAKECMDGOALS) 
# add empty targets for additional goals if needed 
ifneq (,$(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))) 
$(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)): 
endif 
else 
# this is where the real makefile starts 
all more: 
    echo [email protected]: $< $^ 
include a.mak 
endif 
相關問題