私は2つのビルドシステムを一緒に接着しようとしています。どちらも再帰的です(makefileの規則は、プロジェクトのコンポーネントを構築するためにmakeが他のmakefileを呼び出すために使用します)。再帰的ビルドでコマンドライン変数の代入を無視するにはどうすればよいですか?
「A」はアプリケーションをビルドし、「B」は「A」が使用するライブラリをビルドします。
Aの最上位メイクファイルは、 'make TARGET = whatever'を呼び出します。つまり、ビルドのすべての再帰呼び出しビットは、Bからのビルドシステムを含む読み取り専用変数としてTARGETの値を継承します。再帰的ビルドの一部として呼び出されます。
'B'(これは別のプロジェクトから来ている)のビルドシステムでは発生したくないのですが、makefileは独自の目的のためにTARGETを使用しているため、TARGETに間違った値がありビルドに失敗します読み取り専用です。
私はこれに対して2つの解決方法しか見ることができません。どちらもパレットテーブルではありません。
1)ビルドシステムの下位レベルとの衝突を避けるために、TARGETを設定するAのメイクファイル内の他のもの、およびそれを使用するAのメイクファイルにTARGETの名前を変更します。
2)TARGET変数が設定されているBのメークファイルのどこでも、 'override'ディレクティブを使用して、読み取り専用ステータスを上書きします。
誰でも良いアイデアがありますか? - 理想的には、何もはAのBビルドシステムに明示的に渡すオプションを除いて、AのBビルドシステムに継承されません。
ちなみに、私はGNU Make v3.80を使用しています。
BのメイクファイルでTARGETを設定したくない場合は、なぜAのメイクファイルにTARGET =何を渡していますか? – JesperE
Aのトップレベルのメイクファイルは、A(それを必要とする)の第2レベルのメークファイルにTARGET =何も渡し、Aの第2レベルのメイクファイルはBのメイクファイルを呼び出します。これはTARGETを読み取り専用変数として第2レベルのmake。 –