繁体   English   中英

Bash:覆盖make文件中的路径

[英]Bash: Overriding paths in a make file

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

阅读一些文档后:使用环境变量,我发现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

    ...

为了弄清乔纳森所说的话,您不想使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM