13

ネイティブ コンパイルとクロス コンパイル用の 2 つの makefile があります。それらの唯一の違いはコンパイラ名です:

# メイクファイル
CC = g++
...
# makefile-cc
CC = アーム-linux-gnueabihf-g++
...

ネイティブ コンパイルを行うには を実行makeし、クロス コンパイルを行うには を実行しmake -f makefile-ccます。ネイティブ コンパイルとクロスコンパイルmakefileを使用して実行する必要がある1 つが必要です。これを行う正しい構文は次のようなものです。makemake cross

# makefile (Cライクな疑似コード)
交差する場合
    CC = アーム-linux-gnueabihf-g++
そうしないと
    CC = g++
4

4 に答える 4

19

行で構文target:assignmentを使用して、特定のターゲットに変数を割り当てる/追加することができます。次に例を示します。

native: CC=cc
native:
    echo $(CC)

cross: CC=arm-linux-gnueabihf-g++
cross:
    echo $(CC)

呼び出し

make native

(またはmake、ここでは)プリント

echo cc
cc

と呼び出し

make cross

版画

echo arm-linux-gnueabihf-g++
arm-linux-gnueabihf-g++

したがって、通常のコンパイル行を $(CC) で使用できます

于 2012-11-13T09:31:13.420 に答える
8

make にパラメーターを渡すことができます。
たとえばmake TARGET=nativemake TARGET=crossこれを使用します

ifeq ($(TARGET),cross)
        CC = arm-linux-gnueabihf-g++
else
        CC = g++
endif
于 2012-11-13T09:34:03.750 に答える
0

gnu make の方法よりも移植性の高い別の方法ifeqは次のとおりです。

CROSSを含むかarm-linux-gnueabihf-空です。

CC=$(CROSS)g++

CC には展開結果が含まれます。

于 2012-11-13T11:36:34.643 に答える
0

まさにあなたが望んでいたものではありませんがCC、環境変数として読み取ることができます。次のことを考慮してMakefileください。

all:
        echo $(CC)

そして、あなたはそれを呼び出すことができCC=g++ makeます:

echo g++
g++

またはそれを呼び出すと、次のようになりCC=arm-linux-gnueabihf-g++ makeます。

echo arm-linux-gnueabihf-g++
arm-linux-gnueabihf-g++

そして最良の部分は、これらを~/.bashrcasexport CC=g++export CC=arm-linux-gnueabihf-g++それぞれに入れ、 のみで呼び出しを行うことができることmakeです。

于 2012-11-13T09:53:58.320 に答える