2016-06-12 81 views
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 

    ... 
+0

我認爲你誤讀'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'設置在使用之前? –

+0

如果你必須解決某些問題,命令行設置爲'make'的參數不能被環境或makefile覆蓋(在頂級make中)。正常的優先級層次(從最高到最低)是命令行參數,makefile,environment; 'make -e'選項將其改變爲命令行參數,環境,makefile。 –

回答

2

要澄清一下喬納森說,你不希望使用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