已确认文件存在,Makefile include却提示“No such file or directory”
问题原因与解决方法
错误原因
你把include指令写在了build目标的shell命令序列里。include是GNU Make的顶层解析指令,作用是在Makefile加载阶段导入其他Makefile,而非执行目标时可运行的shell命令。当Make执行build目标的命令时,会把-include ...当成普通shell命令去执行,但系统中没有名为include的shell工具,因此报错“include: No such file or directory”。
修复后的Makefile
将-include移到Makefile的顶层(所有目标定义之外)即可:
OTHER_MAKEFILE_PATH = ./Makefile2 # 把include放在顶层,让Make在解析阶段处理 -include $(abspath $(OTHER_MAKEFILE_PATH)) .PHONY: build build: @test -e $(abspath $(OTHER_MAKEFILE_PATH)) && echo "File exists" || echo "File does not exists"
额外说明
-include本身就具备忽略文件不存在错误的特性(前缀-用于抑制错误),因此你写的test检查其实可以省略,Make会自动处理文件不存在的情况,不会中断执行。- Make的
include是在解析阶段处理的,而非执行阶段。如果需要在build目标执行时才加载其他Makefile,不符合Make的工作逻辑,这种场景通常需要用make -f调用子Makefile来实现,但多数情况下顶层include就足够满足需求。
内容的提问来源于stack exchange,提问作者steve_oc
相关产品推荐
相关产品推荐

