9

メイクファイルのターゲットをパラメーター化しようとしています。現在、それは

TARGET = main

上部近くの宣言。そこからリストを派生SRCさせ、他の多くのことを行います。

ただし、基本的にバリアント ビルドを取得するために、複数の異なるトップ レベル .c ファイルを使用できるように、C コードを変更しました。だから私ができるようになりたいのは基本的に

make target1

また

make target2

そしてTARGET、メイクファイルで設定されているものを変えます。これを達成する方法がわかりません。私は次のようなものを追加するかもしれないと思った

target1: all
    TARGET=target1

しかし、これはあまりうまく機能していないようでした。これを行う方法の一般的なパターンはありますか?

4

3 に答える 3

19

メイクファイルでターゲットを個別のターゲットとして単純に綴ることをお勧めします。

all: target1 target2

OTHER_OBJS = misca.o miscb.o miscc.o

target1: target1.o $(OTHER_OBJS)

target2: target2.o $(OTHER_OBJS)

次にmakemake target1make target2、などはすべてあなたが望むことをします。

SRCMakefile はおそらくハイテクな方法で「 [ ] からリストを導出する」と言っています$(TARGET)が、上記のように代わりにローテクな方法でオブジェクト ファイルを明示的にリストしてみると面白いかもしれません。異なるmakeターゲットを使用することは、異なる結果を生成するための Make の一般的なパターンであることはほぼ間違いありません。

于 2012-12-18T11:52:50.280 に答える
11

ターゲット固有の変数の値は通常、そのターゲットの前提条件によって「継承」されるため、パラメーター化された変数名とターゲット固有の変数は、必要に応じて実行できます(GNU makeを使用している場合)。

target1_SRC=123 456
target2_SRC=abc def

target1: TARGET=target1
target2: TARGET=target2

target1: all
target2: all

all: ; @echo $($(TARGET)_SRC)

make target1次に、またはを実行できますmake target2。たとえば、次のようになります。

$ make target1
123 456
$ make target2
abc def
于 2012-12-17T18:05:55.473 に答える