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