0
我正在創建一個bash腳本,該腳本使用gcc的本地副本作爲arm。爲了兼容性,我需要有多個版本的gcc。我的bash腳本正確下載二進制文件,在本地設置路徑,但make文件忽略本地版本。Bash:重寫make文件中的路徑
閱讀了一些文檔後make: Using Environment Variables我發現有一個export -e OPTION=VALUE
從一個bash腳本將覆蓋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
...
我認爲你誤讀'make'手冊。如此處所述,https://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_9.html#SEC92'-e'是'make'選項,而不是'export'選項。回到你的問題 - 在你的'arm-tools.mk'中的'GCC_ARM_PATH'設置在使用之前? –
如果你必須解決某些問題,命令行設置爲'make'的參數不能被環境或makefile覆蓋(在頂級make中)。正常的優先級層次(從最高到最低)是命令行參數,makefile,environment; 'make -e'選項將其改變爲命令行參數,環境,makefile。 –