You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨makefile调用时提示${CFG_PATH}/makefile.cfg不存在问题求助

问题原因

Make 解析相对路径时,默认以执行make命令的工作目录为基准,而非makefile文件本身的存放目录:

  • 直接在目标makefile所在目录执行时,CFG_PATH := cfg_path指向的是当前目录下的cfg_path子目录,路径匹配所以能正常加载配置
  • 从其他目录通过-f参数指定该makefile执行时,make的工作目录仍是执行调用命令的目录,此时相对路径${CFG_PATH}/makefile.cfg会从当前工作目录下查找,自然找不到存放在${makefile_location}下的对应配置文件,触发不存在报错。
解决方案

可根据实际场景选择以下任意一种方案修复:

  • 方案1(无需修改原makefile,优先推荐):调用时通过-C参数切换工作目录到目标makefile所在目录,命令修改为:

    ${MAKE} Target -C ${makefile_location}
    

    -C参数会让make先切换到指定目录,再执行后续逻辑,所有相对路径都会以该目录为基准,执行完成后会自动回到原工作目录。

  • 方案2(无需修改调用命令,通用性最高):修改原makefile,动态获取自身所在目录,将CFG_PATH改为基于该目录的路径,修改后代码如下:

    # 获取当前makefile的所在绝对目录
    SELF_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
    CFG_PATH := ${SELF_DIR}/cfg_path
    
    include ${CFG_PATH}/makefile.cfg
    
    # 后续原有代码保持不变
    INPUT_DIR=${PROG_INPUT_DIR}/input
    MANIFEST_FILE = ${MANIFEST_DIR}/manifest.xml
    $(shell mkdir -p ${INPUT_DIR})
    
    Some_Target:
    .
    .
    .
    .
    
    Target:
    

    该方案修改后,不管从任意目录调用该makefile,都能正确定位到同目录下的cfg_path文件夹,适合需要对外提供通用makefile的场景。

  • 方案3(临时调用场景适用):调用时显式传入CFG_PATH的绝对路径,命令修改为:

    ${MAKE} Target -f ${makefile_location}/makefile CFG_PATH=${makefile_location}/cfg_path
    

    该方案不需要修改原makefile,仅适合临时调用、不方便修改原文件的场景。

内容的提问来源于stack exchange,提问作者Abdullah Shakir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:15:03