2 つのビルド システムを結合しようとしています。どちらも再帰的です (makefile のルールは make を使用して他の makefile を呼び出し、プロジェクトのコンポーネントをビルドします)。
これらを「A」と「B」と呼びます。「A」はアプリケーションをビルドし、「B」は「A」が使用するライブラリをビルドします。
A の最上位の makefile は、'make TARGET=whatever' を呼び出します。これは、ビルドの再帰的に呼び出されるすべてのビットが、TARGET の値を読み取り専用変数として継承することを意味します。再帰ビルド。
「B」(別のプロジェクトからのもの) のビルド システムでこれが発生することを望んでいません。そこのメイクファイルは TARGET を独自の目的で使用し、TARGET の値が間違っていて読み取り専用であるためビルドが失敗するためです。
これに対する解決策は 2 つしかありません。
1) TARGET を設定する A の makefile とそれを使用する A の makefile で TARGET の名前を別の名前に変更して、ビルド システムの下位レベルとの衝突を回避します。
2) TARGET 変数が設定されている B の makefile のどこでも 'override' ディレクティブを使用して、その読み取り専用ステータスをオーバーライドします。
誰もがより良いアイデアを持っていますか? - 理想的には、A から B ビルド システムに明示的に渡すオプションを除いて、A から B のビルド システムに何も継承されないようにします。
ちなみにGNU Make v3.80を使っています。