2016-06-12 14 views
0

私はgccのローカルコピーをarmに使用するbashスクリプトを作成しています。互換性のために、複数のバージョンのgccを用意する必要があります。私のbashスクリプトは正しくバイナリをダウンロードし、パスをローカルに設定しますが、makeファイルはローカルバージョンを無視します。Bash:makeファイル内のパスを上書きする

いくつかのドキュメントmake: Using Environment Variablesを読んだあと、デフォルトのパスを上書きするbashスクリプトからexport -e OPTION=VALUEが見つかりました。

これは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 

そしてメイクファイル(arm-tools.mk)に:あなたはexport -eを使用しないと、使用しない

# 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'オプションではありません。あなたの質問に戻る - 'GCC_ARM_PATH'は使用前に' arm-tools.mk'のどこかに設定されていますか? –

+0

何かを修正する必要がある場合、コマンドラインで 'make 'に設定された引数は、環境またはmakefileによって(最上位の' make'では)上書きできません。通常の優先順位の階層(最高から最低)は、コマンドライン引数、makefile、環境です。 'make -e'オプションはそれをコマンドライン引数、環境、makefileに変更します。 –

答えて

2

ジョナサンが言ったことを明確にするために、 make -eであり、メークファイルを変更する必要はありません。変数の割り当てを優先させるには、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 
関連する問題