2016-06-15 14 views
2

makeとsubによってコンパイルされる各ファイルに、一意の番号を割り当てようとしています。このために私はexport varName = 1を使用してトップレベルのmakeに変数をエクスポートして、このサブメイクファイルが呼び出されたときに問題がvarNameが再び1に初期化されメークファイルのグローバル変数

$(eval varName=$(shell echo $$(($(varName)+1)))) 

次を使用してコンパイルされた各.cファイルに対してインクリメントなっていますトップレベルのmakefile。

サブメークファイルを呼び出すときに最後に更新された値を保持するにはどうすればよいですか?

+0

なぜこれをやりたいですか?より良い方法があるかもしれません。 –

+0

標準の定義済みマクロ(__FILE__、__LINE__)に似たユーザー定義マクロを定義したいと考えています。 __FILE__マクロはファイル名を与えます。私はファイルの一意の整数値を与える__FILENUMBERのようなものを実装したいと思います。私はこの特定のCファイルを-DFILE_NUMBER = fileNumを使って割り当てることができます。ここで、fileNumは、Makeによってコンパイルされるファイルごとに異なります。その他の提案は大歓迎です。ありがとう –

+0

'foo.c'がファイル番号35を取得した場合、それは に35番目のファイルであったことを意味し、その番号を' foo.o'にコンパイルしますか? 次回は、それがコンパイルされる168番目のファイルかもしれません。あるいは、まったくコンパイルされず、 'bar.c'は35番になります。だから、' foo.o'と 'bar.o'はどちらも35番です。私はその考え方がどういう意味か分かりません。 –

答えて

0

変数をエクスポートするだけで、サブメイクが変数の個別のテーブルを初期化するためのコピーが提供されます。したがって、これは値の変更の書き戻しを許可しません。

真にグローバル変数を作成するには、ファイルまたはデータベーステーブルに保持されているカウンタをインクリメントする外部プログラムまたはスクリプトを呼び出すことができます。ただし、サブプロセスの作成が順次ではなく並行して開始された場合は、この問題が発生する可能性があります。これにより、パラレルアクセスが発生し、おそらく再現不可能な番号付けシーケンスが発生します。

objections in generalがサブメイクを使用しています。コンパイルごとに追加の外部プロセスを作成すると、作成時間が長くなります。