8

コマンドライン変数を使用して、コンパイルに使用するツールキットを選択しようとしています。コマンドラインで使用する場合は、次のような行を使用します。

make all-arm OUR_TOOLKIT=1

そして、暗黙のすべてのmakefileに、これを含めます

include ARM_Compiler.inc

次に、すべてのmakefileで、

all: setToolkit $(otherOperations)

また、ARM_Compilerの内容は、コンパイラーを選択するためのロジックです。

setToolkit: 
ifdef OUR_TOOLKIT
    TOOLKIT=1
endif
ifdef CUSTOMER_TOOLKIT
    TOOLKIT=2
endif

ifeq ($(TOOLKIT), 1)
    $(info "=========Our toolkit selected======================")
    rm=/bin/rm -f
    CC= arm-linux-c++ -fPIC
    CXX= arm-linux-c++ -fPIC
    LINK= arm-linux-c++ -shared -Wl
    AR= ar cq
    RANLIB= ranlib
    STRIP=arm-linux-strip 

    # para que se utilicen las herramientas y librerias del cross compiler
    PATH:=$(PATH):/path/to/our/toolkit
    LD_LIBRAY_PATH:=$(LD_LIBRAY_PATH):/path/to/our/toolkit          
endif

ifeq ($(TOOLKIT), 2)
    $(info "================Customer toolkit selected====================")
    rm=/bin/rm -f
    CC= arm-none-linux-gnueabi-c++ -fPIC
    CXX= arm-none-linux-gnueabi-c++ -fPIC
    LINK= arm-none-linux-gnueabi-c++ -shared -Wl
    AR= ar cq
    RANLIB= ranlib
    STRIP= arm-none-linux-gnueabi-strip 

    # para que se utilicen las herramientas y librerias del cross compiler
    PATH:=$(PATH):/path/to/other/toolkit
    LD_LIBRAY_PATH:=$(LD_LIBRAY_PATH):/path/to/other/toolkit
endif

0A0Dの助けを借りて、TOOLKIT値が常に空であることを発見しました。コードを少し変更しました。ここで問題は、makeがエラーをスローすることです

../makefile-includes/ARM-compiler.inc:10: *** commands commence before first target

この行で:

ifeq ($(TOOLKIT), 1)

誰かが何か考えを持っていますか?ありがとう

4

1 に答える 1

8

この質問のバリエーションはたくさん出てきます。

各コマンドは独自のサブシェルで実行されます。あるコマンドで設定された変数を別のコマンドで使用することはできません。

ただし、ルールの外で変数を設定することはできます。上記の条件ステートメントから先頭の TAB をすべて削除するだけです。これは、 と を除くすべてPATHで機能しますLD_LIBRARY_PATH。私の意見では、これらのいずれも Make が干渉すべきものではありませんが、必要な効果を得る方法はいくつかあります。PATH次のように処理できます。

ifeq ($(TOOLKIT), 1)
  TOOLKITPATH = /path/to/our/toolkit
endif
...

sometarget:
    $(TOOLKITPATH)/sometool somearg

またはこのように:

all:
    export PATH=$$PATH:$(TOOLKITPATH) ; $(MAKE) $(otherOperations)

そして、おそらくまったく使用LD_LIBRARY_PATHしないでください。

于 2012-06-04T19:46:55.893 に答える