残念ながら、nmake は make の影響を受けていないだけであり、多くの重要なことを正しく行うことができませんでした。最も簡単な方法は、両方のプラットフォームで同じ種類の make を使用することから始めることです。
Linux では、Gnu make がデフォルトで最適なオプションです。
Windows では、いくつかの癖のある Gnu make のソースがいくつかあります。個人的には、GnuWin32 プロジェクトの Gnu make のネイティブ win32 ビルドを主に使用しています。他のいくつかのパッケージもあると便利なので、プロジェクトの残りのパッケージを調べてみることをお勧めします。
代替ソースはCygwinとMinGW32/MSYSです。
Cygwin は、Windows カーネル上に *nix 互換環境を提供する信頼できる試みです。これは、Windows API 経由で実装された *nix (特に POSIX) システム コールの大部分をエクスポートする DLL で構成されています。その DLL には、ディスク マウントに関する独自の考えもあり、*nix スタイルのパス名を好みます。DLL 自体はライセンスされた GPL であり (商用利用ライセンスは有料で利用できます)、Cygwin 環境でビルドされたプログラムはデフォルトでそれを必要とするため、考慮すべき要素になる可能性があります。もう 1 つの要因は、Cygwin が通常の Windows ユーザーにとって使いにくいことです。そのため、Cygwin に基づく開発プロジェクトは通常、UNIX 以外のユーザーにとって扱いにくいものになります。ただし、クロスプラットフォームの開発者にとっては、Cygwin は Makefile に必要な通常の疑わしいユーティリティ プログラムをすべて取得できるため、非常に便利です。
MinGW32 は移植プロジェクトであり、GCC コンパイラを移植してネイティブ Windows 実行可能ファイルとして実行するという非常に優れた仕事をしました。それらが提供するヘッダー ファイルと一緒に使用すると、最新の Windows インストールに同梱されている C ランタイム DLL を介して、ほぼすべての Windows API を使用できます。
MSYS は Cygwin の軽量フォークであり、通常は典型的な *nix Makefile によって存在すると想定される最小限のユーティリティ セット (*nix シェルで始まる) が含まれています。Cygwin とは異なり、MSYS はデフォルトのターゲットがネイティブ Windows API になるように構成されています。
私がここでほのめかそうとしていること、そしておそらく率直に述べるべきことは、互換性の問題は make you use の方言で終わらないということです。
Makefile 言語自体は利用可能なコマンド シェルに大きく依存しており、最も深刻なプロジェクトの Makefile は、cp や rm などのコア ユーティリティの多くを使用することになります。
make の GnuWin32 ビルドから始めて、MinGW32 と MSYS もインストールすることを強くお勧めします。これにより、MSYS と Linux の両方で動作する Makefile を比較的簡単に作成でき、必要なプラットフォーム固有のロジックはわずかです。