2016-08-12 2 views
1

私は現在、GNU Make 3.81 --jobs=1を使用していますが、GNU Make 4.2.1 --jobs=X、つまりマルチスレッドに移行しようとしています。GNU make - 差分バージョンへの切り替えがビルド出力に影響する可能性がありますか?

メイクファイル、環境などEVERYTHING他はまったく同じです。

QUESTION

はそれが.obj Sまたは任意のアーティファクトが異なるようにするためには可能ですか?メイクファイルは、あなたのMakefileが並列正しい、違いがある場合、それらは

+0

はい。異なるバージョンの 'make 'を使うことが理由になります。あなたの依存関係が徹底的に記述されていない場合、並列makeは別の潜在的な理由です。例: 'foo.c'は' foo.l'から最初に生成されてコンパイルされ、 'foo.o'を生成します。しかし、 'make 'に' foo.c'に 'foo.l'があることを忘れてしまいました。 'foo.l'が変更された場合、' --jobs = 1'で動作しますが、 '--jobs = 2'で' foo.c'がコンパイルされて更新される。 –

+0

@RenaudPacaletはい良いキャッチ!しかし、 'make 'のバージョンを変更するだけで効果が得られるかどうかは分かりません。だから私は質問を更新しました。 – Adrian

答えて

1

「パラレル正しい」です。すなわち、すべての依存関係が正しく、徹底的に指定されている論理的に正しい意味です

UPDATE

想定そこから来ることはできません。

はい、異なるバージョンのmakeを使用すると、異なる制作につながる可能性があります。特に、あるバージョンから別のバージョンへのそのような長い飛躍のために、何百もの理由があります。ここでは、バージョン3.82のリリースノートから、例です。

* WARNING: Backward-incompatibility! 
    The library search behavior has changed to be compatible with the standard 
    linker behavior. Prior to this version for prerequisites specified using 
    the -lfoo syntax make first searched for libfoo.so in the current 
    directory, vpath directories, and system directories. If that didn't yield 
    a match, make then searched for libfoo.a in these directories. Starting 
    with this version make searches first for libfoo.so and then for libfoo.a 
    in each of these directories in order. 

ので、バージョン3.82ではなく3.81を使用すると、リンカが別のライブラリファイルを使用するため、異なるバイナリを生成させることができます。

3.81と4.2.1の間のすべての同様の可能性をリストすることは、莫大な作業になります。

+0

ニースキャッチ。私のビルドチームは、違いがないことを証明するために、2ヶ月間make版を除いて同じビルドを実行する予定です。相違点の説明が可能なのは良いことです。 – Adrian

関連する問題