我正在创建一个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
...
答案 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