2017-01-18 100 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 
相关问题