Bash:覆盖make文件中的路径

时间:2016-06-12 17:01:53

标签: linux bash makefile

我正在创建一个bash脚本,它使用gcc的本地副本for arm。为了兼容性,我需要有多个版本的gcc。我的bash脚本正确下载二进制文件,在本地设置路径,但make文件忽略本地版本。

在阅读了一些文档make: Using Environment Variables后,我发现bash脚本中有一个export -e OPTION=VALUE将覆盖make默认路径。

这在我的本地bash副本中效果很好,但是当通过圆形测试服务器运行它时,它会失败,说-e是无效的选项。

任何人都知道更好的方法来覆盖make内部的路径?特别是对于我无法更改make文件的第三方项目。

GCC_ARM_VER=gcc-arm-none-eabi-4_8-2014q2    
export -e GCC_ARM_PATH=$BINDIR/gcc-arm-embedded/$GCC_ARM_VER/bin
export PATH=$GCC_ARM_PATH:$PATH
make all -s -C "$BASE_FIRMWARE/"firmware APPDIR="$CWD/firmware" TARGET_DIR="$CWD/bin" PLATFORM="$1" || exit

然后在make文件(arm-tools.mk)中:

    # Define the compiler/tools prefix
    GCC_PREFIX ?= arm-none-eabi-

    include $(COMMON_BUILD)/common-tools.mk

    AR = $(GCC_ARM_PATH)$(GCC_PREFIX)gcc-ar

    #
    # default flags for targeting ARM
    #

    # C compiler flags
    CFLAGS +=  -g3 -gdwarf-2 -Os -mcpu=cortex-m3 -mthumb

    # C++ specific flags
    CPPFLAGS += -fno-exceptions -fno-rtti -fcheck-new

    CONLYFLAGS +=

    ASFLAGS +=  -g3 -gdwarf-2 -mcpu=cortex-m3 -mthumb

    LDFLAGS += -nostartfiles -Xlinker --gc-sections

    ...

1 个答案:

答案 0 :(得分:2)

为了澄清Jonathan所说的内容,您不想使用export -e,并且您不想使用make -e,并且您不需要修改makefile 。如果希望变量赋值优先,则需要做的就是将其添加到make命令行:

GCC_ARM_VER=gcc-arm-none-eabi-4_8-2014q2
export PATH=$GCC_ARM_PATH:$PATH
make all -s -C "$BASE_FIRMWARE/"firmware \
    APPDIR="$CWD/firmware" TARGET_DIR="$CWD/bin" PLATFORM="$1" \
    GCC_ARM_PATH="$BINDIR/gcc-arm-embedded/$GCC_ARM_VER/bin" \
  || exit