我有一个看起来像这样的makefile:
include anotherFile.mk
all:
someStuff
文件anotherFile.mk
是这样的:
include yetAnotherFile.mk
export SOME_VAR = 93
问题是anotherFile.mk
和yetAnotherFile.mk
与Makefile位于不同的目录中。所以我的makefile不能改为:
include $(OTHER_PROJECT_PATH)/anotherFile.mk
all:
someStuff
这种方法的问题是anotherFile.mk
中的include语句会失败,因为它将在当前目录中搜索。
我找到的部分解决方案是将--include-dir=$OTHER_PROJECT_PATH
标志传递给make的调用,但这对用户不友好。
所以我的问题是:我的makefile中是否有可以添加到执行include
时搜索的目录?像MAKE_INCLUDE_DIRS += $(OTHER_PROJECT_PATH)
答案 0 :(得分:1)
令人惊讶的是,这个问题似乎并不是一个好的答案。强制.INCLUDE_DIR
并没有帮助,似乎无法用make
调用--include-dir=$OTHER_PROJECT_PATH
。
然而,可以在makefile中放置适当的递归make调用,但是为了让它适用于所有合理的情况,它很快变得太复杂而不值得。总之,它需要:
OTHER_PROJECT_PATH
是否在.INCLUDE_DIR
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 $@: $< $^
include a.mak
endif
答案 1 :(得分:1)
在makefile中似乎仍然不可能,但是如果您有一个设置环境变量的脚本,则可以使用MAKEFLAGS(例如,在Linux上为export MAKEFLAGS = I / your / path ordentlich,在Windows上为SET)>